#!/usr/bin/perl use strict; use warnings; my @dispatchtab = ( { moduldatei => 'test_extern.pl', aufruf_sub => \&testsub, aufruf_neu => 'testsub', unit => 'test1', }, { moduldatei => 'test_extern2.pl', aufruf_sub => \&testsub, aufruf_neu => 'testsub', unit => 'test2', }, # hier sind natürlich noch ganz viele ); my $arg = 0; foreach my $ref (@dispatchtab) { my $packname = $ref->{unit}; $packname =~ s/\W//g; my $source = do{ my $fh = IO::File->new; $fh->open($ref->{moduldatei}, "r") or die $!; read($fh, my $buffer, -s $fh); $fh->close; "package $packname;\n".$buffer; }; eval "$source" or die $@; my $coderef = $packname->can($ref->{aufruf_sub}); $coderef->(++$arg); }