Ohne Klammer kannst du die Funktion deklarieren wo du willst.
leider nicht!
die Funktion schon.
Warum? Offensichtlich doch nicht ganz am Anfang des scripts noch vor der Variablendeklaration, wie Du nachstehend schreibst.
Struppi meinte, dass Du die Funktion auch nach ihrem Aufruf notieren kannst - abgesehen von den Variablendeklarationen, das Thema ist denke ich klar geworden. Im Übrigen sind Konstrukte der Art
my $var = 'foo';
foo();
sub foo {
print uc $var;
}
schlechter Stil. Besser wäre, auch unter Prototype-Bedingungen:
sub foo($) {
return uc shift;
}
my $var = 'foo';
print foo($var);
Wenn du globale (bzw. in dem Falle globale lexikalische) Variabeln verwenden möchtest, ja.
Jetzt bringst Du mich ins Schleudern! Von globalen lexikalischen Variablen habe ich in den Unterlagen nichts gefunden.
In Deinem Beispiel ist $v1 scriptglobal, darauf wollte Struppi hinaus. Du solltest lexikalische Variablen in dem Kontext deklarieren, in dem Du sie benötigst (siehe mein kleines Beispiel oben), alles andere ist eine potentielle Fehlerquelle.
Siechfred
Wir vom Moderatorenteam haben keinerlei Humor, von dem wir wüssten.