HI
kommts du mit dem Regelsatz zurecht???
Ich find die Kurzversion besser...
Warum dann unterschiedliches Verhalten, wenn sub Namen hat und wenn nicht - beides sind Blöcke?
Es gibt auch keinen, in dem Beispiel treibt man aber Schindluder mit "Redefinierungen" von Subs.
Nochmal: >>>Was genau intern abläuft kann ich dir nicht sagen, aber innerhalb einer Routine dynamisch eine andere zu definieren ist komplexe "Metaprogrammierung".<<<
Du RE-definierst hier bei jedem Durchlauf der äußeren Routine die innere neu.
Bzw. du versuchst es, aber Perl weigert sich, mit dem Hinweis, dafür doch lieber anonyme Subs zu nutzen! [*]
DER UNTERSCHIED IST:
Dann erzeugst du jedesmal eine NEUE anonyme innere Routine.
Hier geht es also nicht mehr um Scopes oder Blöcke von Variablen, sondern darum unter welchen Bedingungen man einen Funktion *dynamisch* - d.h. während des Runtime - redefinieren darf.
Aber "Closures" sind echt kein Anfängerthema.
Bye
Kurt
[*] welche Sprachen können das auch?!? Über den genauen Grund warum Perl das nicht implementiert kann ich nur spekulieren ...