Tricky! But there's a way (and probably more than one). do returns the value of the last evaluation in the file; this means we can stick __PACKAGE__ at the end of the file and then grab this value with do.
In do-test2.pl:
#!/usr/bin/perl
use strict;
use warnings;
while (<subdir/*.pl>) {
my $pkg = do $_;
print "Loaded package $pkg\n";
{
no strict 'refs';
&{"${pkg}::spew"}();
}
}
In subdir/foo.pl:
package Foo;
print "Executing foo.pl\n";
sub spew {
print "This is package Foo\n";
}
__PACKAGE__
subdir/bar.pl is similar to subdir/foo.pl, as above.
Output of do-test2.pl:
Executing bar.pl
Loaded package Bar
This is package Bar
Executing foo.pl
Loaded package Foo
This is package Foo
Dynamic. |