Thread [POE] Subaufrufe (11 answers)
Opened by eisbeer at 2004-08-22 17:22

ptk
 2004-08-24 12:40
#49565 #49565
User since
2003-11-28
3645 Artikel
ModeratorIn
[default_avatar]
Es sieht aus, als ob irgendwo im POE-Framework deine Subroutine verloren geht, weil sie nicht richtig serialisiert/deserialisiert werden konnte. Evtl. gibt es gar keine Unterstuetzung fuer Referenzen oder es gibt nur keine Unterstuetzung fuer CODE-Referenzen.

Mit B::Deparse koenntest du den Sourcecode der Subroutine erzeugen und irgendwo ablegen. Dann koenntest du auf der anderen Seite ein eval() oder vielleicht besser (da sicherer) ein Safe::reval machen, um die Subroutine wieder zu erhalten. Das machen z.B. auch Data::Dumper (wenn $Deparse auf wahr gesetzt ist) und Storable (ebenso).

Anwendung:
Code: (dl )
perl -l -MB::Deparse -e '$sub = sub { print "Hallo, Welt!" }; print "sub " . B::Deparse->new->coderef2text($sub)'
ergibt
Code: (dl )
1
2
3
sub {
print 'Hallo, Welt!';
}
. B::Deparse ist nicht perfekt. In seltenen Faellen wird falscher Sourcecode erzeugt. Ausserhalb definierte lexikalische Variablen sind nach dem Deserialisieren normalerweise nicht sichtbar.

View full thread [POE] Subaufrufe