Hi
Das Verhalten von Subs lsst sich mit einer einfachen Regel beschreiben:
1. Bennante werden statisch definiert, das heit das jeweils letzte vorkommen im Text ist bindend ...(unabhngig von allen Klammern)
2. Anonyme Subs werden (natrlich) dynamisch definiert.
3. Die vorherigen Regeln fr Geltungsbereiche von Variablen sind zum jeweiligen Deklarationszeitpunkt voll gltig.
Ich finde wenn man umbedingt generisch programmieren mchte sind das gute Regeln.
Gru
Kurt
PS: denkt euch bitte die Umlaute Emacs und Firefox haben unter Debian wohl Kommunikationsprobleme.
#[code lang=perl]
use strict;
sub gen {
# benannte subs werden statisch angelegt,die letzte definition bestimmt.
# deswegen dominiert hier das statisch letzte "nein"
my $gen=shift;
if ($gen eq "JA") {
sub sag {
print "ja $gen\n"
}
}else {
sub sag {
print "nein $gen\n"
}
}
}
gen("JA");
sag();
gen("NEIN");
sag();
gen("JA");
sag();
=for OUTPUT:
nein JA
nein JA
nein JA
=cut
sub gen2 {
# Anonyme subs werden dynamisch angelegt, per Typeglob in die
# Symboltablle kann man sag auch dynamisch anpassen
my $gen=shift;
my $sub;
if ($gen eq "JA") {
$sub=sub {
print "ja $gen\n"
}
}else {
$sub=sub {
print "nein $gen\n"
}
};
*sag=$sub;
}
gen2("JA");
sag();
gen2("NEIN");
sag();
gen2("JA");
sag();
=for OUTPUT:
ja JA
nein NEIN
ja JA
=cut
#[/code ]