speedy: Datei möglichst einfach in ein Skalar lesen

Hallo Forum,

ich habe da eine Textdatei mit mehreren Zeilenümbrüchen. Nun kann ich diese mit @datei=<DATEIHANDLE> schön einfach ein eine Liste einlesen. Mit $datei=<DATEIHANDLE> wird nur die erste Zeile eingelesen. Gibt es eine Möglichkeit die Datei möglichst simpel in einen String einzulesen?

Dankeschön
  speedy

  1. Hi speedy!

    Vielleicht so (allerdings nicht in einem Schritt):

    #datei in liste lesen
    @datei=<DATEIHANDLE>
    #liste in string wandeln, einzelne listenelemente mit leerzeichen getrennt
    $datei_str=join(" ",@datei);
    #nun noch ggf. die \n entfernen
    $datei =~ s/\n//g;

    Gruß Frank

    1. Hi speedy!
      Hi frank!

      oder vielleicht so:

      while(!eof(FP)){$daten.=<FP>;}
      $daten=~ s/\n/ /g; #zeilenumbruch mit space ersetzen

      Gruß
      Thomas

      1. Hi Ihr alle,

        while(!eof(FP)){$daten.=<FP>;}
        $daten=~ s/\n/ /g; #zeilenumbruch mit space ersetzen

        Ja, das gefällt mir. Vielen Dank an euch alle, hat mir sehr geholfen.
        <persönlich>Hi ThomasP, Grüsse an Frau und "Kinder"</persönlich>

        CU
        speedy

  2. Hallo speedy

    Gibt es eine Möglichkeit die Datei möglichst simpel in einen

    »»String einzulesen?

    zwei Vorschläge:

    1 - mit dem Modul File::Slurp (cooler Name, finde ich...)

    use File::Slurp;
        
         $datei = read_file($dateiname);

    2 -
      
        {
         local $/ = undef;
         $datei = <FILEHANDLE>;
        }
            
    diese Möglichkeit nur innerhalb eines Blockes verwenden, da sie an $/ rumschraubt.

    Viele Grüsse,

    Thorsten

    1. Moin!

      1 - mit dem Modul File::Slurp (cooler Name, finde ich...)

      use File::Slurp;
          
           $datei = read_file($dateiname);

      Ineffizient! Das Modul tut naemlich auch nichts anderes als das, was Frank vorgeschlagen hat, wie ein kurzer Blick in den Source-Code zeigt.
      Ausserdem ist es kein Standardmodul, man kann sich auf seine Verfuegbarkeit also nicht verlassen. Nuin gut, man koennte es natuerlich einfach mitliefern.

      2 -
        
          {
           local $/ = undef;
           $datei = <FILEHANDLE>;
          }

      Das ist die effizienteste und zu bevorzugende Methode. Hier werden naemlich nicht erst muehsam die Zeilen getrennt, die danach sowieso nur wieder mit join() zusammengefuegt werden.

      So lange, Calocybe