Thread Perl Pause ? (bei CGI) (36 answers)
Opened by Henry07 at 2012-11-19 12:15

topeg
 2012-11-20 12:52
#163403 #163403
User since
2006-07-10
2611 Artikel
BenutzerIn

user image
Guest Henry
>* open mit 3 Parametern
> check auf open
Meinst du mit check auf open '..|| die "kann file $file nicht lesen !!"'
oder gibt es sonst noch einen 3. Parameter, die man abrufen muss ?

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
>* Filehandle nicht global
Warum, nur so kann ich doch aus einer Sub zugreifen, oder ?

>Eine parse funktion ohne Parameter ist vorsätzliche Gegnerverwirrung
Der Vortei ist wohl, dass man sofort die übergebenen variablen sieht ?

>Man schreibts auch ohne &
Oha, das würde ich dann vielleicht mit einem Label verwechseln. Was
ist der Vorteil es ohne & zu schreiben ?

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.

View full thread Perl Pause ? (bei CGI)