Hallo Struppi,
Ohne Klammer kannst du die Funktion deklarieren wo du willst.
leider nicht!
#!/usr/bin/perl -w
sub sub1
{
print "11: \$v1=$v1\n";
}
my $v1 = 10;
print "00: \$v1=$v1\n";
sub1 ();
Ergebnis
Name "main::v1" used only once: possible typo at F:\cgi-bin\p1.pl line 4.
00: $v1=10
Use of uninitialized value in concatenation (.) or string at F:\cgi-bin\p1.pl line 4.
11: $v1=
Zum Zeitpunkt des Aufrufs der Funktion sub1 ist $v1 definiert und sie hat den Wert 10. Trotzdem ist die Variable in der Funktion nicht bekannt.
Laut Perl-Beschreibung ist die Variable bekannt ab dem Zeitpunkt der Deklaration, dies in Perl aber allerdings im statischen Sinne.
Dies ist ungwöhnlich, oder?
Man müsste daher wohl sagen:
Die Funktion kannst Du deklarieren wo Du willst, allerdings müssen
darin verwendete lexikalische Variablen im Quelltext (statisch) davor deklariert werden. Die Wertzuweisung muss (dynamisch) vor dem Funktionsaufruf erfolgt sein.
Gruß
Thomas