Lexikalische Variable
am 09.10.2006 14:06:48 von Ferry Bolhar
Hallo,
ich bin heute durch Zufall auf ein (für mich) merkwürdiges Verhalten
in Zusammenhang mit lexikalischen Variablen und Schleifen gestoßen,
das man am besten mit folgendem Code nachvollziehen kann:
my $test = 'Hugo';
my @array = qw(1 2 3);
foreach $test (@array) {
last if $test == 2;
}
print "$test\n";
Ausgegeben wird - nein, nicht "2", sondern "Hugo". Hm.
Es sieht also so aus, als würde '$test' innerhalb der Schleife noch
einmal als lexikalische Variable deklariert werden, also wie wenn
man
foreach my $test (@array)
geschrieben hätte. Aber genau das habe ich eben nicht.
Ist diese Verhalten jemandem bekannt? Ist es irgendwo dokumentiert?
Irgendwie fühle mich an die Worte eines (mittlerweile in Pension
gegangenen) Kollegen erinnert, der da sagte: "Du kannst jahrelang
Perl programmieren. Aber immer wenn du glaubst, du hast die
Sprache endlich wirklich ganz verstanden, stößt du wieder auf
etwas Neues!" ;-)
LG, Ferry
--
Ing Ferry Bolhar
Magistrat der Stadt Wien - MA 14
A-1010 Wien
E-Mail: bol@adv.magwien.gv.at
Re: Lexikalische Variable
am 09.10.2006 14:18:58 von Daniel Fischer
Ferry Bolhar!
> Ist diese Verhalten jemandem bekannt? Ist es irgendwo dokumentiert?
Klar. Aus perlsyn, besonders der letzte Satz:
| The "foreach" loop iterates over a normal list value and sets the
| variable VAR to be each element of the list in turn. If the variable is
| preceded with the keyword "my", then it is lexically scoped, and is
| therefore visible only within the loop. Otherwise, the variable is
| implicitly local to the loop and regains its former value upon exiting
| the loop.
Gruss
Daniel
Re: Lexikalische Variable
am 09.10.2006 14:32:19 von Frank Seitz
Ferry Bolhar wrote:
> Ist diese Verhalten jemandem bekannt? Ist es irgendwo dokumentiert?
Es war mir so ausdrücklich nicht bekannt, aber ich habe es,
wie mein Vorposter, dort dokumentiert gefunden, wo ich es
erwarte: in perlsyn, Abschnitt "Foreach Loops":
Foreach Loops
The "foreach" loop iterates over a normal list value and sets the vari-
able VAR to be each element of the list in turn. If the variable is
preceded with the keyword "my", then it is lexically scoped, and is
therefore visible only within the loop. Otherwise, the variable is
implicitly local to the loop and regains its former value upon exiting
the loop. If the variable was previously declared with "my", it uses
that variable instead of the global one, but it's still localized to
the loop. This implicit localisation occurs only in a "foreach" loop.
> Irgendwie fühle mich an die Worte eines (mittlerweile in Pension
> gegangenen) Kollegen erinnert, der da sagte: "Du kannst jahrelang
> Perl programmieren. Aber immer wenn du glaubst, du hast die
> Sprache endlich wirklich ganz verstanden, stößt du wieder auf
> etwas Neues!" ;-)
Man kann Perl sehr gut verstehen, finde ich. Aber es ist wohl
unmöglich, alle Facetten und Details der Sprache zu kennen.
Am Wochenende habe ich mich mit (selbstdefinierten) Subroutine-Attributen
befasst, etwas, was ich nie zuvor angeguckt habe, aber nun
sehr gut gebrauchen kann. Man entdeckt eben immer wieder
etwas spannendes Neues.
Grüße
Frank
--
Dipl.-Inform. Frank Seitz; http://www.fseitz.de/
Anwendungen für Ihr Internet und Intranet
Tel: 04103/180301; Fax: -02; Industriestr. 31, 22880 Wedel
Re: Lexikalische Variable
am 10.10.2006 08:56:41 von Ferry Bolhar
Daniel Fischer:
> Klar. Aus perlsyn, besonders der letzte Satz:
>
> | The "foreach" loop iterates over a normal list value and sets the
> | variable VAR to be each element of the list in turn. If the variable is
> | preceded with the keyword "my", then it is lexically scoped, and is
> | therefore visible only within the loop. Otherwise, the variable is
> | implicitly local to the loop and regains its former value upon exiting
> | the loop.
Allerdings hätte ich das nur auf globale Variable, die in der Schleife
implizit local-isiert werden, bezogen (welchen Sinn macht es, eine
lexikalische Variable noch einmal zu lokalisieren?). Aber, wenn man
den Absatz weiterliest, wie auch von Frank zitiert, wird es klar:
> If the variable was previously declared with "my", it uses
> that variable instead of the global one, but it's still localized to
> the loop. This implicit localisation occurs only in a "foreach" loop.
Dumm, denn ich hätte den Wert der Schleifenvariable außerhalb
der Schleife gerne weiterverwendet. Eigentlich merkwürdig, dass
man dies Lokalisierung nicht zumindest abschalten kann.
Na, jedenfalls danke für die Erklärung!
LG, Ferry
--
Ing Ferry Bolhar
Magistrat der Stadt Wien - MA 14
A-1010 Wien
E-Mail: bol@adv.magwien.gv.at
Re: Lexikalische Variable
am 10.10.2006 11:20:02 von Daniel Fischer
Ferry Bolhar!
> Dumm, denn ich hätte den Wert der Schleifenvariable außerhalb
> der Schleife gerne weiterverwendet. Eigentlich merkwürdig, dass
> man dies Lokalisierung nicht zumindest abschalten kann.
Nichts hindert Dich daran, den Wert noch einer anderen Variablen
zuzuweisen, oder eine andere Schleifenform als foreach zu benutzen.
Gruss
Daniel
Re: Lexikalische Variable
am 12.10.2006 11:21:12 von Ferry Bolhar
Hallo, ich schrieb:
> Irgendwie fühle mich an die Worte eines (mittlerweile in Pension
> gegangenen) Kollegen erinnert, der da sagte: "Du kannst jahrelang
> Perl programmieren. Aber immer wenn du glaubst, du hast die
> Sprache endlich wirklich ganz verstanden, stößt du wieder auf
> etwas Neues!" ;-)
Und das hat etwas für sich - jetzt habe ich wieder etwas entdeckt,
was ich mir nicht erklären kann. Nehmen wir dieses Beispiel:
my $var = 'Hugo';
foreach $var (qw(a b c)){
print $var; # Gibt "abc" aus.
}
Wir wissen jetzt, dass foreach innerhalb der Schleife die
lexikalische Variable $var nochmal lokalisiert, sodass $var
nach der Schleife wieder den Wert "Hugo" hat. Ich verstehe
zwar immer noch nicht, _warum_ das so ist, aber ich weiß
jetzt wenigstens, _dass_ es so ist.
So weit, so gut. Nun erweitern wir dieses Skript:
my $var = 'Hugo';
foreach $var (qw(a b c)) {
print $var; # Gibt "abc" aus
print_var(); # Gibt 3x "Sub: Hugo" aus
}
sub print_var {
print "Sub: $var";
}
Also: innerhalb der foreach-Schleife nimmt $var temporär die
Werte des Arrays bzw. der Liste an. OK. Aber warum hat es
dann in der Subroutine, die in diesem Context (dh., im Scope der
Schleife) aufgerufen wird, wieder den Wert, den es _außerhalb_
der Schleife hatte??
LG, Ferry
--
Ing Ferry Bolhar
Magistrat der Stadt Wien - MA 14
A-1010 Wien
E-Mail: bol@adv.magwien.gv.at
Re: Lexikalische Variable
am 12.10.2006 11:53:00 von ReneeB
Ferry Bolhar schrieb:
>
> my $var =3D 'Hugo';
>
> foreach $var (qw(a b c)) {
> print $var; # Gibt "abc" aus
> print_var(); # Gibt 3x "Sub: Hugo" aus
> }
>
> sub print_var {
> print "Sub: $var";
> }
>
> Also: innerhalb der foreach-Schleife nimmt $var temporär die
> Werte des Arrays bzw. der Liste an. OK. Aber warum hat es
> dann in der Subroutine, die in diesem Context (dh., im Scope der
> Schleife) aufgerufen wird, wieder den Wert, den es _außerhalb_
> der Schleife hatte??
>
> LG, Ferry
>
> --
> Ing Ferry Bolhar
> Magistrat der Stadt Wien - MA 14
> A-1010 Wien
> E-Mail: bol@adv.magwien.gv.at
Aus perldoc -f local:
A local modifies the listed variables to be local to
the enclosing block
Und die Subroutine ist außerhalb des Blocks...
Re: Lexikalische Variable
am 12.10.2006 13:00:29 von Mirco Wahab
Thus spoke ReneeB (on 2006-10-12 11:53):
> Aus perldoc -f local:
> A local modifies the listed variables to be local to
> the enclosing block
>
> Und die Subroutine ist außerhalb des Blocks...
Das ist vielleicht nur scheinbar der Grund, siehe:
my $var = 'Hugo'; # 1:
foreach $var (qw(a b c)) {
print "$var\n";
print_var();
sub print_var {
print "Sub: $var\n";
}
}
Je nach dem, ob Du Zeile 1: auskommentierst,
passiert etwas anderes ...
Viele Grüße
M.
PS.: -------------------------
# our $var = 'Hugo';
my $var = 'Hugo';
foreach $var (qw(a b c)) {
print "$var\n";
print_var_i();
print_var_o();
sub print_var_i {
print "Sub-i: $var\n";
}
}
sub print_var_o {
print "Sub-o: $var\n";
}
Re: Lexikalische Variable
am 12.10.2006 13:26:20 von Frank Seitz
Ferry Bolhar wrote:
> my $var = 'Hugo';
>
> foreach $var (qw(a b c)){
> print $var; # Gibt "abc" aus.
> }
>
> Wir wissen jetzt, dass foreach innerhalb der Schleife die
> lexikalische Variable $var nochmal lokalisiert, sodass $var
> nach der Schleife wieder den Wert "Hugo" hat. Ich verstehe
> zwar immer noch nicht, _warum_ das so ist, aber ich weiß
> jetzt wenigstens, _dass_ es so ist.
Der Grund dafür dürfte sein, dass die Schleifenvariable
in foreach keine gewöhnliche Variable ist, sondern ein
Alias für das betreffende Listenelement. Die darf
wegen dieser Sonderrolle außerhalb der Schleife
IMO garnicht weiterleben.
> So weit, so gut. Nun erweitern wir dieses Skript:
>
> my $var = 'Hugo';
>
> foreach $var (qw(a b c)) {
> print $var; # Gibt "abc" aus
> print_var(); # Gibt 3x "Sub: Hugo" aus
> }
>
> sub print_var {
> print "Sub: $var";
> }
>
> Also: innerhalb der foreach-Schleife nimmt $var temporär die
> Werte des Arrays bzw. der Liste an. OK. Aber warum hat es
> dann in der Subroutine, die in diesem Context (dh., im Scope der
> Schleife) aufgerufen wird, wieder den Wert, den es _außerhalb_
> der Schleife hatte??
Ehrlich gesagt verstehe ich nicht, wieso Du etwas anderes
erwartest, als das was rauskommt: $var ist eine lexikalische
Variable und wenn ich $var in print_var() gemäß
dieses Scope auflöse, lande ich bei my $var = 'Hugo'.
Grüße
Frank
--
Dipl.-Inform. Frank Seitz; http://www.fseitz.de/
Anwendungen für Ihr Internet und Intranet
Tel: 04103/180301; Fax: -02; Industriestr. 31, 22880 Wedel
Re: Lexikalische Variable
am 12.10.2006 16:03:50 von hjp-usenet2
On 2006-10-12 11:00, Mirco Wahab wrote:
> PS.: -------------------------
>
> # our $var = 'Hugo';
> my $var = 'Hugo';
>
> foreach $var (qw(a b c)) {
> print "$var\n";
> print_var_i();
> print_var_o();
>
> sub print_var_i {
> print "Sub-i: $var\n";
> }
my $func = sub {
print "Sub-c: $var\n";
};
&$func();
> }
>
> sub print_var_o {
> print "Sub-o: $var\n";
> }
--
_ | Peter J. Holzer | > Wieso sollte man etwas erfinden was nicht
|_|_) | Sysadmin WSR | > ist?
| | | hjp@hjp.at | Was sonst wäre der Sinn des Erfindens?
__/ | http://www.hjp.at/ | -- P. Einstein u. V. Gringmuth in desd
Re: Lexikalische Variable
am 13.10.2006 08:37:46 von Ferry Bolhar
Renee B:
> Aus perldoc -f local:
> A local modifies the listed variables to be local to
> the enclosing block
>
> Und die Subroutine ist außerhalb des Blocks...
Aber nicht ihr Aufruf zur Laufzeit. Genau das scheint hier
das Problem zu sein: die Frage, was unter "enclosing block"
zu verstehen ist bzw. wann das "enclosing" Gültigkeit hat.
Ich lege noch eins drauf: verwendet man zur Deklaration
statt "my" "our" (oder läßt die Deklaration ganz weg),
dann funktioniert es wie erwartet.
Also?
LG, Ferry
--
Ing Ferry Bolhar
Magistrat der Stadt Wien - MA 14
A-1010 Wien
E-Mail: bol@adv.magwien.gv.at
Re: Lexikalische Variable
am 13.10.2006 09:01:28 von Ferry Bolhar
Frank Seitz:
>> Also: innerhalb der foreach-Schleife nimmt $var temporär die
>> Werte des Arrays bzw. der Liste an. OK. Aber warum hat es
>> dann in der Subroutine, die in diesem Context (dh., im Scope der
>> Schleife) aufgerufen wird, wieder den Wert, den es _außerhalb_
>> der Schleife hatte??
>
> Ehrlich gesagt verstehe ich nicht, wieso Du etwas anderes
> erwartest, als das was rauskommt: $var ist eine lexikalische
> Variable und wenn ich $var in print_var() gemäß
> dieses Scope auflöse, lande ich bei my $var = 'Hugo'.
Wieso? print_var() wird _innerhalb_ des Scopes, in dem
$var die Werte 'a', 'b' und 'c' annimmt, aufgerufen. Meinem
Verständnis nach ist eine lexikalische Variable zur Laufzeit
innerhalb des Scopes, in dem sie deklariert wurde, und innerhalb
aller diesem Scope untergeordnetem Scopes sichtbar, außer sie
wird in einem dieser Scopes noch einmal deklariert.
Innerhalb des Scopes der "foreach" Schleife wird $var, wie
ja erst kürzlich erläutert wurde, lokalisiert und wird über die
angegebenen Listenwerte iteriert. Rufe ich daher _innerhalb_
dieses Scopes eine Funktion auf, so läuft auch sie darin ab.
Die Funktion ist zwar außerhalb des Scopes deklariert, aber
der Aufruf geschieht innerhalb des von "foreach" eingerichteten
Scopes, und um das geht es ja. Daher ist mir nicht klar, wieso
die Funktion selber wieder auf eine lexikalische Variable außerhalb
des Scopes zugreift.
PS: Ersetzt man das "my" durch "our" (oder läßt die Deklaration
von "$var" ganz weg), dann funktioniert es wie erwartet
(bzw. wie ich es erwarten würde ;-). Wie erklärst du dir das?
LG, Ferry
--
Ing Ferry Bolhar
Magistrat der Stadt Wien - MA 14
A-1010 Wien
E-Mail: bol@adv.magwien.gv.at
Re: Lexikalische Variable
am 13.10.2006 11:27:24 von Frank Seitz
Ferry Bolhar wrote:
>>>Also: innerhalb der foreach-Schleife nimmt $var temporär die
>>>Werte des Arrays bzw. der Liste an. OK. Aber warum hat es
>>>dann in der Subroutine, die in diesem Context (dh., im Scope der
>>> Schleife) aufgerufen wird, wieder den Wert, den es _außerhalb_
>>>der Schleife hatte??
>>
>>Ehrlich gesagt verstehe ich nicht, wieso Du etwas anderes
>>erwartest, als das was rauskommt: $var ist eine lexikalische
>>Variable und wenn ich $var in print_var() gemäß
>>dieses Scope auflöse, lande ich bei my $var = 'Hugo'.
>
> Wieso? print_var() wird _innerhalb_ des Scopes, in dem
> $var die Werte 'a', 'b' und 'c' annimmt, aufgerufen.
Dein Missverständnis ist: Bei lexikalischem Scoping spielt
allein der Kontext, in dem eine Variable deklariert wird,
eine Rolle, nicht der Aufrufkontext.
> Innerhalb des Scopes der "foreach" Schleife wird $var, wie
> ja erst kürzlich erläutert wurde, lokalisiert und wird über die
> angegebenen Listenwerte iteriert.
Falls Du mit "lokalisiert" meinst, dass die Variable intern
mit local vereinbart wird, ist das nicht richtig. Wurde die
Schleifenvariable vorab lexikalisch deklariert (also mit my),
bleibt sie lexikalisch. So steht es in der Doku zu foreach.
> PS: Ersetzt man das "my" durch "our" (oder läßt die Deklaration
> von "$var" ganz weg), dann funktioniert es wie erwartet
> (bzw. wie ich es erwarten würde ;-). Wie erklärst du dir das?
In dem Fall ist $var keine lexikalische Variable, sondern
eine globale, hat also dynamischen Scope. D.h. ihr Wert ergibt
sich (genau umgekehrt) nicht aus dem Deklarations- sondern aus
dem Aufrufkontext.
Ich weiß nicht, ob lexikalisches vs. dynamisches Scoping
Dir als Begriffe so geläufig sind. Die haben nicht speziell etwas
mit Perl zu tun, sondern sind von allgemeiner Bedeutung.
Die meisten Programmiersprachen haben eine der
beiden Scopingarten, Perl hat beide.
Grüße
Frank
--
Dipl.-Inform. Frank Seitz; http://www.fseitz.de/
Anwendungen für Ihr Internet und Intranet
Tel: 04103/180301; Fax: -02; Industriestr. 31, 22880 Wedel
Re: Lexikalische Variable
am 13.10.2006 14:32:30 von Ingo Menger
Ferry Bolhar schrieb:
> Frank Seitz:
>
> >> Also: innerhalb der foreach-Schleife nimmt $var temporär die
> >> Werte des Arrays bzw. der Liste an. OK. Aber warum hat es
> >> dann in der Subroutine, die in diesem Context (dh., im Scope der
> >> Schleife) aufgerufen wird, wieder den Wert, den es _außerhalb_
> >> der Schleife hatte??
> >
> > Ehrlich gesagt verstehe ich nicht, wieso Du etwas anderes
> > erwartest, als das was rauskommt: $var ist eine lexikalische
> > Variable und wenn ich $var in print_var() gemäß
> > dieses Scope auflöse, lande ich bei my $var =3D 'Hugo'.
>
> Wieso? print_var() wird _innerhalb_ des Scopes, in dem
> $var die Werte 'a', 'b' und 'c' annimmt, aufgerufen. Meinem
> Verständnis nach ist eine lexikalische Variable zur Laufzeit
> innerhalb des Scopes, in dem sie deklariert wurde, und innerhalb
> aller diesem Scope untergeordnetem Scopes sichtbar, außer sie
> wird in einem dieser Scopes noch einmal deklariert.
>
> Innerhalb des Scopes der "foreach" Schleife wird $var, wie
> ja erst kürzlich erläutert wurde, lokalisiert und wird über die
> angegebenen Listenwerte iteriert. Rufe ich daher _innerhalb_
> dieses Scopes eine Funktion auf, so läuft auch sie darin ab.
> Die Funktion ist zwar außerhalb des Scopes deklariert, aber
> der Aufruf geschieht innerhalb des von "foreach" eingerichteten
> Scopes, und um das geht es ja.
Zum Verständnis: spiel doch in Gedanken mal Compiler und compiliere
print_var(). Dann wird Dir sofort klar, daß in print_var bei Bezug auf
$var nur die im selben lexikalischen Scope (hier: Filescope)
deklarierte Variable in Frage kommt.
Im foreach-loop, aber eben nur in dem Text, der dort tatsächlich steht
bzw. ge-eval()ed wird, ist hingegen $var nichts anderes als ein Alias
auf das aktuelle Listenelement.
Am Besten und Saubersten ist m.E:, wenn man sich daran gewöhnt, das
foreach so zu lesen:
"Arbeite folgende Liste ab und laß uns das aktuelle Listenelement
jeweils $var nennen." und nicht so: "Arbeite folgende Liste ab und
setze meine $var-Variable in jedem Durchgang auf das aktuelle
Listenelement."
Ein kleiner, aber feiner Unterschied.
Zugegeben, die our-Variablen und das ganze local-Geraffel machen die
Sache nicht einfacher.
Re: Lexikalische Variable
am 16.10.2006 09:48:21 von Ferry Bolhar
Frank Seitz:
> Dein Missverständnis ist: Bei lexikalischem Scoping spielt
> allein der Kontext, in dem eine Variable deklariert wird,
> eine Rolle, nicht der Aufrufkontext.
Ja, wobei ich schon den Begriff "lexikalisch" missverständlich
finde - "statisch" würde IMHO mehr Sinn machen. Was ist
hier mit "lexikalisch" gemeint?
> > Innerhalb des Scopes der "foreach" Schleife wird $var, wie
> > ja erst kürzlich erläutert wurde, lokalisiert und wird über die
> > angegebenen Listenwerte iteriert.
>
> Falls Du mit "lokalisiert" meinst, dass die Variable intern
> mit local vereinbart wird, ist das nicht richtig. Wurde die
> Schleifenvariable vorab lexikalisch deklariert (also mit my),
> bleibt sie lexikalisch. So steht es in der Doku zu foreach.
Ja, aber sie wird dennoch temporär - innerhalb der Schleife -
mit den Schleifenwerten lokalisiert. Sozusagen die Lokalisation
einer lexikalischen Variable; etwas, das es sonst nicht gibt.
Darüber bin ich ja zuerst gestolpert; ich dachte, die Lokalisierung
mit foreach geschieht nur, wenn eine globale Variable als
Schleifenvariable verwendet wird (was IMHO auch mehr Sinn
machen würde), und nicht auch mit einer lexikalischen.
> Ich weiß nicht, ob lexikalisches vs. dynamisches Scoping
> Dir als Begriffe so geläufig sind.
Scheinbar nicht so ganz - sichtlich hat das eine mehr beim
Compilieren (lexikalisch), das andere mehr zur Laufzeit
(dynamisch) Gültigkeit.
> Die haben nicht speziell etwas
> mit Perl zu tun, sondern sind von allgemeiner Bedeutung.
> Die meisten Programmiersprachen haben eine der
> beiden Scopingarten, Perl hat beide.
Ich verstehe das mal so, dass Compilersprachen eher
lexikalisches Scoping haben, Interpretersprachen hingegen
eher mehr dynamisches, und Perl, da es eben eine Mischung
aus Compiler und Interpreter ist, beides?
Danke für die Info - da muss ich möglicherweise noch sehr
umdenken. Nun wird mir auch klarer, was das Besondere
an "Closures" ist.
LG, Ferry
--
Ing Ferry Bolhar
Magistrat der Stadt Wien - MA 14
A-1010 Wien
E-Mail: bol@adv.magwien.gv.at
Re: Lexikalische Variable
am 16.10.2006 13:51:23 von Frank Seitz
Ferry Bolhar wrote:
> Frank Seitz:
>>
>>Dein Missverständnis ist: Bei lexikalischem Scoping spielt
>>allein der Kontext, in dem eine Variable deklariert wird,
>>eine Rolle, nicht der Aufrufkontext.
>
> Ja, wobei ich schon den Begriff "lexikalisch" missverständlich
> finde - "statisch" würde IMHO mehr Sinn machen. Was ist
> hier mit "lexikalisch" gemeint?
"Static scope" kannst Du auch dazu sagen. "Lexical scope"
deshalb, weil sich der Scope aus der Schachtelungsstruktur
auf Quelltextebene ergibt.
>>>Innerhalb des Scopes der "foreach" Schleife wird $var, wie
>>>ja erst kürzlich erläutert wurde, lokalisiert und wird über die
>>>angegebenen Listenwerte iteriert.
>>
>>Falls Du mit "lokalisiert" meinst, dass die Variable intern
>>mit local vereinbart wird, ist das nicht richtig. Wurde die
>>Schleifenvariable vorab lexikalisch deklariert (also mit my),
>>bleibt sie lexikalisch. So steht es in der Doku zu foreach.
>
> Ja, aber sie wird dennoch temporär - innerhalb der Schleife -
> mit den Schleifenwerten lokalisiert. Sozusagen die Lokalisation
> einer lexikalischen Variable; etwas, das es sonst nicht gibt.
Wieso das?
Bei einem stinknormalen Block verhält es sich genauso:
my $var = 'Hugo';
{
my $var = 'abc';
print "$var\n";
print_var();
}
sub print_var
{
print "Sub: $var\n";
}
> Ich verstehe das mal so, dass Compilersprachen eher
> lexikalisches Scoping haben, Interpretersprachen hingegen
> eher mehr dynamisches, und Perl, da es eben eine Mischung
> aus Compiler und Interpreter ist, beides?
Du brauchst Dir das nicht zusammenreimen. Lexikalisches
und dynamisches Scoping sind Grundbegriffe der Informatik,
die Du präzise definiert nachlesen kannst.
Google kennst Du ja bestimmt ;)
Grüße
Frank
--
Dipl.-Inform. Frank Seitz; http://www.fseitz.de/
Anwendungen für Ihr Internet und Intranet
Tel: 04103/180301; Fax: -02; Industriestr. 31, 22880 Wedel