Leser: 13
|< 1 2 3 4 >| | 31 Einträge, 4 Seiten |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
my $zaehler = 0;
bla();
sub bla{
my $var = $zaehler++;
print "$var". "\n";
inbla();
sub inbla{
if($var<2){
bla();
}
}
}
perldoc perlsubUnlike dynamic variables created by the local operator, lexical variables declared with my are totally hidden from the outside world, including any called subroutines. This is true if it's the same subroutine called from itself or elsewhere--every call gets its own copy.
pq+2008-02-18 13:22:46--ich würde hier nicht local benutzen, sondern erstmal das ganze überdenken.
zwei verschachtelte subroutinen will man in den seltensten fällen, und der code
ist für das, was er eigentlichtut, nämlich sehr wenig, wahnsinnig kompliziert und
unverständlich.
ist das so gemacht, damit der nächste maintainer den code nicht kapiert?
pq+2008-02-18 13:22:46--ich würde hier nicht local benutzen, sondern erstmal das ganze überdenken.
zwei verschachtelte subroutinen will man in den seltensten fällen,
Gast+2008-02-18 14:27:28--pq+2008-02-18 13:22:46--ich würde hier nicht local benutzen, sondern erstmal das ganze überdenken.
zwei verschachtelte subroutinen will man in den seltensten fällen,
ich möchte hinzufügen: zwei verschachtelte benannte Subs will man eigentlich NIE!
Das ist ein ziemlich krankes Closure wo die Variablenbindung absolut unintuitiv wird.
[...]
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
my $zaehler = 0; bla(); sub bla{ my $var = $zaehler++; my $inbla = sub { if($var<2){ bla(); } } print "$var". "\n"; $inbla->(); }
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
my $zaehler = 0; bla(); sub bla{ my $var = $zaehler++; local *inbla = sub { if($var<2){ bla(); } } print "$var". "\n"; inbla(); }
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
sub closure { my $abc = shift; $rs_increment = sub {$abc++}; $rs_abc = sub {$abc} ; print "Innen: ", &$rs_abc , "\n"; ($rs_increment, $rs_abc); } ($inc, $fetch) = closure(10); #> Innen: 10 ($inc2, $fetch2) = closure(20); #> Innen: 20 &$inc; &$inc; &$inc; print "Aussen: ",&$fetch; #> Aussen: 13 print "Aussen: ",&$fetch2; #> Aussen: 20
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
sub closure { my $abc = shift; $rs_increment = sub {$abc++}; sub abc {$abc} ; print "Innen: ", abc() , "\n"; ($rs_increment, \&abc ); } ($inc, $fetch) = closure(10); #> Innen: 10 ($inc2, $fetch2) = closure(20); #> Innen: 10 &$inc; &$inc; &$inc; print "Aussen: ",&$fetch; #> Aussen: 13 print "Aussen: ",&$fetch2; #> Aussen: 13
KurtZ+2008-02-18 17:54:15--[...]
BTW: Du beherrschst die Sprache der wilden Klammerwälder und umgedrehten Notationen? ... Kannst mir mit meinem Emacs helfen? ;-)
QuoteEDIT: @Murphy: Sorry ich seh gerade die sub_ref schreibweise hast du ja auch schon beschrieben. Lesen müsste man können 8-)
( ich finde ich diese alternierenden Aufrufe von bla() und inbla() recht kryptisch - Was soll das?)
murphy+2008-02-19 15:11:54--oder wenn man einen Programmteil im Continuation-passing-style schreibt.
|< 1 2 3 4 >| | 31 Einträge, 4 Seiten |