#!/usr/bin/perl use strict; use warnings; my @dispatchtab = ( { moduldatei => 'test_extern.pl', aufruf_sub => \&testsub, aufruf_neu => 'testsub', unit => 'unit1', }, { moduldatei => 'test_extern2.pl', aufruf_sub => \&testsub, aufruf_neu => 'testsub', unit => 'unit2', }, # hier sind natürlich noch ganz viele ); foreach my $ref (@dispatchtab) { my $source = do{ my $fh = IO::File->new; $fh->open($ref->{moduldatei},'r') or die $!; read($fh, my $buffer, -s $fh); $fh->close; "package $ref->{unit};\n".$buffer; }; eval "$source"; # $ref->{aufruf_neu}->('a'); # FQN: Der Name der Package ist das erste Argument! UNIVERSAL::can($ref->{moduldatei},$ref->{aufruf_neu}); # $ref->{moduldatei} auch wieder ohne Dateiendung }