#!/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}; }