Artikel im Internet unter http://www.hidemail.de/blog/open-perl.shtml.
Donnerstag, 29.3.2007, 00:04:45 Uhr

open() - Dateien zum Lesen oder Schreiben öffnen in Perl


Mit dem Befehl open() werden in Perl Dateien zum Lesen, Schreiben oder Ausführen geöffnet.
Als Parameter werden erwartet:
Mit Hilfe der >, < und |-Zeichen vor dem Dateinamen bzw. Pfadnamen kann man zusätzlich festlegen, ob eine Datei zum Lesen, Schreiben, Anbhängen oder Auführen geöffnet werden soll.
Wird nichts angegeben, wird eine Datei zum Lesen geöffnet.

Hier nochmals die einzelnen Modi:
Wenn die Datei geöffnet werden kann, gibt die Funktion open den Wert true zurück, andernfalls den Wert undef.

open(IN,"<datei.txt");
close IN;


Öffnet die Datei datei.txt zum Lesen.


open(IN,'>'.$datei);
close IN;


Öffnet die Datei, deren Name in $datei angegeben ist, zum Schreiben. Dabei wird eine existierende Datei überschrieben, falls vorhanden. Da nach dem Öffnen die Datei sofort wieder geschlossen wird, wird eine leere Datei erzeugt.


open(IN,'<'.$datei) || die "Can not open file $datei: $!";

while(<IN>){
next if ($_=~ /^#/);
print "$_\n";
}
close IN;


Öffnet die Datei $datei, gibt eine Fehlermeldung aus, falls diese Datei nicht vorhanden ist.
Danach wird der Dateiinhalt ausgegeben. Zeilen, die mit einem # beginnen, werden dabei herausgefilter.

Vorsicht
Öffnen Sie niemals Dateien, deren Namen von einer Usereingabe bestimmt werden.
Oder vielleicht verständlicher ausgedrückt: Wenn ein Gast auf Ihrer Webseite eine Eingabe in ein Formular machen kann, die dann als Name einer Datei verwendet werden soll, sollten Sie UNBEDINGT vorher ungültige Zeichen herausfilern.
Mehr dazu hier.
Geöffnete Dateien sollte man, wenn man sie nicht mehr braucht, wieder schließen. Das spart System-Ressourcen und gibt sie für andere Prozesse frei, falls die Datei gesperrt wurde.

Große Dateien sollte man nicht erst komplett in den Speicher einlesen, um sie dann zu verarbeiten. Dies könnte den Rechner lahm legen...

Übrigens
Aus Gründen der Sicherheit sollte man die 3-Argumente-Form beim Öffnen von Dateien verwenden:

open (IN,'<',$datei);



Und nochwas
Möglich ist auch Folgendes:

open (my $IN,'<'.$datei);


Dies hat den Vorteil, daß $IN gleich eine lokale Variable darstellt und daß die Datei automatisch geschlossen wird, wenn der Block verlassen wird.
Gerade in Scripten, in denen man z.B. per require mehrere Module hinzulädt, kann man so Überschneidungen vermeiden, die oftmals schwer zu finden sind.



Artikel im Internet unter http://www.hidemail.de/blog/open-perl.shtml.