Thread Bad name after...
(52 answers)
Opened by bianca at 2015-02-19 12:08
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: 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 |