Thread Bad name after... (52 answers)
Opened by bianca at 2015-02-19 12:08

bianca
 2015-02-22 08:30
#179823 #179823
User since
2009-09-13
6975 Artikel
BenutzerIn

user image
Interpolation war das Stichwort mit dem ich was anfangen konnte. String-eval sagte mir nichts. Scheint gelöst zu sein:
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
25
26
27
28
29
30
31
32
33
34
35
36
37
38
#!/usr/bin/perl
use strict;
use warnings;

my @dispatchtab = (
    {
        moduldatei      => 'test_extern.pl',
        aufruf_neu      => 'testsub',
        unit            => 'unit1',
        stringval       => defined,
    },
    {
        moduldatei      => 'test_extern2.pl',
        aufruf_neu      => 'testsub',
        unit            => 'unit2',
    },
    # hier sind natürlich noch ganz viele
);
for my $ref ( @dispatchtab ) {
    my %back;
    if (defined $ref->{stringval}) {
        eval <<"EVAL_CODE";
package $ref->{unit};
require "$ref->{moduldatei}";
\$back{text} = $ref->{aufruf_neu}->(\$ref->{unit});
EVAL_CODE
        warn "ACHTUNG: '$@'\n" if $@;
    }
    else {
        eval <<"EVAL_CODE";
package $ref->{unit};
require "$ref->{moduldatei}";
$ref->{aufruf_neu}->(\$ref->{unit},\\%back);
EVAL_CODE
        warn "ACHTUNG: '$@'\n" if $@;
    }
    print $back{text};
}


Wirft:
Code: (dl )
1
2
Gewonnen! Sub unit1
Gewonnen! Sub unit2


Danke dir, Linuxer!

Jetzt wäre noch toll, wenn wir einen Weg fänden, der nicht darin besteht, in verschiedene packages zu laden sondern einfach innerhalb der Schleife nach Aufruf der Haupt-sub alle sub's aus dem jeweiligen externen Script wieder aus dem Speicher zu löschen -> require'd sub löschen
Zwar glaube ich nicht, dass ich in meiner Anwendung für die Dauer dieser Übergangslösung Speicherprobleme bekommen werde aber es interessiert mich trotzdem sehr.
10 print "Hallo"
20 goto 10

View full thread Bad name after...