package junk;
sub BEGIN { printf "Hi from %s BEGIN\n", __PACKAGE__ }
sub CHECK { printf "Hi from %s CHECK\n", __PACKAGE__ }
sub INIT { printf "Hi from %s INIT\n", __PACKAGE__ }
sub END { printf "Hi from %s END\n", __PACKAGE__ }
1;
####
#! perl -slw
use strict;
print "Main runtime: About to eval use junk"; ;
eval "use junk";
print "Main runtime: Just eval'd use junk"; ;
####
C:\test>junk
Main runtime: About to eval use junk
Hi from junk BEGIN
Too late to run CHECK block at junk.pm line 4, line 1.
Too late to run INIT block at junk.pm line 5, line 1.
Main runtime: Just eval'd use junk
Hi from junk END
####
package junk;
use Attribute::Handlers;
no warnings 'redefine';
sub TRACE : ATTR(CODE,BEGIN) {
my ($pkg, $sym, $ref, $attr, $data, $phase, $file, $line) = @_;
*{ $sym } = sub {
warn "$file($line) called with [@_]\n";
my( @rc )= &$ref;
warn "$file($line): returning [ @rc ]\n";
}
}
sub doStuff :TRACE {
print "junk::doStuff says hi";
}
1;
####
#! perl -slw
use strict;
print "Main runtime: About to eval use junk"; ;
eval "use junk";
print "Main runtime: Just eval'd use junk; calling doStuff()"; ;
junk::doStuff( 1..10 );
####
C:\test>junk
Main runtime: About to eval use junk
Main runtime: Just eval'd use junk; calling doStuff()
junk.pm(16) called with [1 2 3 4 5 6 7 8 9 10]
junk::doStuff says hi
junk.pm(16): returning [ 1 ]