Thread Gültigkeit von Variablen... oder so etwas.
(30 answers)
Opened by theresa at 2008-02-18 13:44
Hi Murphy
doch das geht schon in Perl lexikalisch basteln, ganz ohne local. Die übliche Methode ist dabei anonyme Subs auf Sub_refs zu legen.. Code (perl): (dl
)
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 Problematisch wirds bei benannten Subs, weil sie wie du bereits sagtest 1. im aktuellen globalen Namensraum liegen. 2. was schlimmer ist, die Variablenbindung ist konfus, konkret würde statt in closure() stehen, würde immer auf die Closurevariablen des Ersten durchlaufs zugegriffen. Code (perl): (dl
)
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 Für den OP ist das alles eh belanglos, er muss eine einfache rekursive Funktion mit Abbruchbedingung hinschreiben. BTW: Du beherrschst die Sprache der wilden Klammerwälder und umgedrehten Notationen? ... Kannst mir mit meinem Emacs helfen? ;-) EDIT: @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?) TMTOWTDYOG (there's more than one way to dig your own grave)
|