1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
#!/usr/bin/perl use strict; use warnings; my @dispatchtab = ( { moduldatei => 'test_extern.pl', aufruf => \&testsub, string => defined, }, { moduldatei => 'test_extern2.pl', aufruf => \&testsub, }, # hier sind natürlich noch ganz viele ); for my $ref ( @dispatchtab ) { require $ref->{moduldatei}; my %back; if (defined $ref->{string}) { $back{text} = $ref->{aufruf}->($ref->{moduldatei}); } else { $ref->{aufruf}->($ref->{moduldatei},\%back); } print "$back{text}\n"; undef &testsub; # hier das &testsub muss aus einer Variable kommen, kann so nicht bleiben }
1 2 3 4 5 6 7 8
#!/usr/bin/perl use strict; use warnings; sub testsub { return "Gewonnen! Sub $_[0]\n"; } return '1';
1 2 3 4 5 6 7 8 9 10
#!/usr/bin/perl use strict; use warnings; sub testsub { my ($val,$back) = @_; $back->{text} = "Gewonnen! Sub $val\n"; return; } return '1';
sub { my ($name) = @_; say "Hello $name!"; }
1 2 3 4 5 6 7 8
my $package = 'my_import'.'::'.md5_hash($file); if( eval "package $package; return require '$file';" ){ if( $code = $package::can('function') ){ $code->(...); } }
1 2 3 4 5 6 7 8 9 10 11 12
#!/usr/bin/perl use strict; use warnings; use 5.010; lauf(1); lauf(2); sub lauf { my $coderef = require "test_coderef_sub$_[0].pl"; $coderef->("world"); }
1 2 3 4 5 6 7 8
package test; use strict; use warnings; use 5.010; sub { say "Hello $_[0] 2 "; }
Quoted:\temp>perl test_coderef.pl
Hello world 1
Hello world 2
Quoted:\temp>perl -c test_coderef_sub1.pl
Useless use of reference constructor in void context at test_coderef_sub1.pl line 7.
test_coderef_sub1.pl syntax OK
eval "package $packname; $source";