Hi
das die My-Variable zwar in Unter-Blocks aber nicht in Unter-Subs eindringt ist ja auch etwas was man sich klar machen muss.
Tut sie aber:
sub test
{
my $x = 2;
sub untertest {
print $x;
}
untertest();
}
>
> Allerdings mit einer Warnung
>
hehe ein sub im sub :) ich meinte eher
~~~perl
$x="global";
sub untertest {
print $x;
}
sub test
{
my $x = 2;
untertest();
}
test(); # ausgabe "global"
aber danke dein Beispiel macht das scoping von my wieder klarer! :)
Die Warnung kommt m.E. weil die Garbage Collection $x vernichtet wenn kein Bezug erhalten bleibt. Man könnte sagen Perl beschwert sich dass du kein Closure gebastelt hast:
use warnings;
sub test
{
my $x = 2;
return sub {
print $x++,"\n";
}
}
$sub_ref=test();
$sub_ref->(); #2
$sub_ref->(); #3
$sub_ref->(); #4
Bye
Kurt