Thread Gültigkeit von Variablen... oder so etwas.
(30 answers)
Opened by theresa at 2008-02-18 13:44 murphy+2008-02-20 14:28:52-- hmm ... stimmt ...habe ich bisher nur in Autoloadkonstrukten gesehen.. murphy+2008-02-20 14:28:52-- Eine Statemachine? murphy+2008-02-20 14:28:52-- Ok ich erkennen in deinem Code diverse Regeln: 1. Für benannte Sub ist $_[0] immer die Folgeroutine als code_ref (=def Continuation?) 2. Letzte Aktion statt eines Returns ist der Aufruf der Folgeroutine mittels "goto &$_[0](args)" 3. Im einfachsten Fall erhält man eine lineare Kette von Aufrufen, $_[0] ist ein Code_ref auf den jeweilige Folgeroutine. vereinfachtes Codebeispiel: [1] statt schreibt man Code (perl): (dl
)
sub1(\&sub2) und in sub1 kommt als letztes eine übergabe von \&sub3 als Folgeroutine 4. will man eine Routinen verschachtelt aufrufen, [ wie im Bsp. mit Effekt say(square($x)) ] dann ruft die Oberroutine die Untere mit einer code_ref auf ein Closures der Oberoutine auf, sodass die Unterroutine immer wieder die Kontrolle an die obere übergibt. also statt: gibts Code (perl): (dl
)
1 2 3 4 5 6 7 8 9 sub subA { $rc_contA=shift; $rc1= sub {block1; sub2( $rc2 ) } $rc2= sub {block2; sub3( $rc3 ) } $rc3= sub {block3; &$rc_contA; } $rc1->(); #aufruf } OK ... ich kann mir vorstellen das man Statemachines damit gut und performant realisieren kann... Hmm ...richtig schätzen würde man sowas aber erst wenn man entsprechende Design Patterns beherrscht. Aber ist der Overhead für Routinenaufrufe wirklich so hoch, dass das lohnt? Gruß Kurt [1] der Lesbarkeit willen hab ich auf Gotos verzichtet und die Folgeroutinen konventionell übergeben, was natürlich zu Stacküberläufen führen würde. Auch Argumente hab ich mal weggelassen. Der Codeablauf sollte klar werden. TMTOWTDYOG (there's more than one way to dig your own grave)
|