Thread require'd sub löschen
(17 answers)
Opened by bianca at 2015-02-22 08:10
Angetrieben durch Bad name after... wäre meine Frage, ob man geladenen Code nicht einfach auch wieder entladen kann, um zum einen die Gefahr von selben sub Namen zu entschärfen und auch den Speicher nicht zu voll zu knallen?
Testscripte: test.pl: Code (perl): (dl
)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 #!/usr/bin/perl use strict; use warnings; my @dispatchtab = ( { moduldatei => 'test_extern.pl', aufruf => \&testsub, string => defined, }, { moduldatei => 'test_extern2.pl', aufruf => \&testsub, }, # hier sind natürlich noch ganz viele ); for my $ref ( @dispatchtab ) { require $ref->{moduldatei}; my %back; if (defined $ref->{string}) { $back{text} = $ref->{aufruf}->($ref->{moduldatei}); } else { $ref->{aufruf}->($ref->{moduldatei},\%back); } print "$back{text}\n"; undef &testsub; # hier das &testsub muss aus einer Variable kommen, kann so nicht bleiben } test_extern.pl: Code (perl): (dl
)
1 2 3 4 5 6 7 8 #!/usr/bin/perl use strict; use warnings; sub testsub { return "Gewonnen! Sub $_[0]\n"; } return '1'; test_extern2.pl: Code (perl): (dl
)
1 2 3 4 5 6 7 8 9 10 #!/usr/bin/perl use strict; use warnings; sub testsub { my ($val,$back) = @_; $back->{text} = "Gewonnen! Sub $val\n"; return; } return '1'; Funktioniert perfekt. Frage: Wie kann ich im obersten Script das &testsub für das undef aus einer Variablen holen? Denn tatsächlich heißen die leider nicht alle testsub. Läuft das auf die selben Problemen hinaus, die im anderen Thread schon beschrieben wurden oder gibt es hierfür eine ganz einfache Möglichkeit? Ein Versuch mit undef $ref->{moduldatei}; brachte nichts, es verhält sich als gäbe es diese Zeile nicht, also "...redefined at...". Gäbe es eine Möglichkeit, zu scannen, welche sub's es im geladenen Code gibt und diese alle wieder zu löschen? Denn es kommt hinzu, dass solch ein externes Script manchmal nicht nur aus einer sub besteht. Und ich brauche eben nach Ausführung der sub das alles nicht mehr. Editiert von bianca: Versuch ergänzt Last edited: 2015-02-22 08:15:08 +0100 (CET) 10 print "Hallo"
20 goto 10 |