Thread Perl Pause ? (bei CGI)
(36 answers)
Opened by Henry07 at 2012-11-19 12:15 Guest Henry Was das open mit Drei Parametern betrifft. Man sollte es immer benutzen, da es sicherer ist. Also "open Variable, Datenrichtung, Dateiname". Wenn man open($var,$file) schreibt kann auch "> /pfad/zu/einer/wichtigen/datei.conf" in $file stehen. Damit Lassen sich beliebige Dateien leeren oder Programme ausführen, selbst wenn davon nur gelesen wird. Weiterhin ist es einfacher die Korrektheit eines Pfads zu prüfen wenn kein "<>|-" enthalten sein darf. Auch open($var,"<$file") ist nicht viel besser. Da lässt sich immer noch ein open($var,"<+$file") daraus machen. Außerdem kann bei einigen Betriebssystemen "<name.txt" ein korrekter Dateiname sein. Guest Henry Beispiel: Code (perl): (dl
)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 my @parsed_data; { open(my $fh, '<', $file) or die "Can't open $file ($!)\n"; @parsed_data=parse($fh, fast => 1, lazy => 0); close($fh); } sub parse { my $handle=shift(@_); my %options=@_; my @data; if($options{fast}) { # ... } # parsen der Daten aus dem Filehandle $handle return @data; } Wenn man normale Variablen als FileHandles benutzt kann man sie an Funktionen übergeben. Der Vorteil ist das Funktionen damit sehr viel portabler werden. Weiterhin werden solche Filehandles automatisch geschlossen, wenn sie gelöscht werden (verlassen des Gültigkeitsbereichs). Wenn du Funktionen mit & aufrufst sagst du perl: "Ich bin Experte, ich weiß was ich mache. Auch wenn hier Müll zu stehen scheint kümmere dich nicht darum. Und erzeuge keine Kopie von @_, welche an die Funktion übergeben wird" Aus dem Grund sollten unerfahrene Programmierer &funktion nicht nutzen. Wer das alles nicht weiß wundert sich leicht über das seltsame verhalten von Perl. Besser ist es funktion() zu schreiben, oder funktion($param1, $param2, ...) wenn man Werte übergeben will. Nebenbei Perl erlaubt es auch Werte wider zurück zu geben. Das kapselt die Funktion noch weiter. |