Thread do $file : subs in $file überschreiben meine subs!
(7 answers)
Opened by sman at 2010-01-10 18:19
Hi,
ich arbeite mit Perl von deer Commandozeile, rufe dort script.pl auf. Dieses benutzt ein selbstgeschriebenes package objekte. Das package enthält ein Objekt mit verschiedenen subs, z.B. Code (perl): (dl
)
sub HR { return "-"; } Diese sub wird im Programm mehrfach aufgerufen, aber besonders im Destruktor Code (perl): (dl
)
DESTROY { my $s = shift; print $s->HR; } Der Destruktor meines Objektes wird automatisch beim Beenden von scrpt.pl aufgerufen. Die Probleme entstehen, wenn ich in einer anderen sub Machwas ein anderes Perl-Script aufrufen möchte: Code (perl): (dl
)
sub Machwas { eval { do "anderes.pl"; }; return 1; } Dieses andere Script ist völlig simpel, keine objekte oder module, sondern hat lediglich normale subs, z.B. auch eine Code (perl): (dl
)
sub HR { print "-" x ( $_[0] ? $_[0] : 79 ) ."\n"; } Führe ich nun script.pl aus, und starte darüber dieses "do anderes.pl", geht alles prima, und es beendet auch das friedlich. Danach - immernoch in script.pl, wird HR immer richtig angezeigt, wie vorher auch, wenn es mal aus einer sub heraus mit $s->HR benutzt wird. Wenn nun jedoch script.pl beende, springt ja der Destruktor meines Objekts an. Und dieser schreibt nun unendlich viele "-" hintereinander ins Fenster, bis ich mit Strg+C abbrechen muss. Wie kommt es zu diesem komischen Verhalten? Ich verstehe das nicht ganz. Da ich erst kürzlich mit Objektorientierung angefangen hab, hab ich vielleicht etwas übersehen. Aber das Programm ist bisher sehr groß und alles bis auf dieses funktioniert fehlerfrei. Vielleicht kann man auch irgendwie do $file daran hindern subs zu überschreiben? Nach perldoc sollte das ja eigentlich sowieso nicht gehen... Grüße Martin |