Thread require'd sub löschen (17 answers)
Opened by bianca at 2015-02-22 08:10

bianca
 2015-02-22 08:10
#179822 #179822
User since
2009-09-13
6977 Artikel
BenutzerIn

user image
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

View full thread require'd sub löschen