Beefy Boxes and Bandwidth Generously Provided by pair Networks
Keep It Simple, Stupid
 
PerlMonks  

Re: Let a module call a sub of the caller

by ikegami (Pope)
on Sep 06, 2012 at 23:57 UTC ( #992211=note: print w/replies, xml ) Need Help??


in reply to Let a module call a sub of the caller

The same mechanisms pragmas use to clean themselves up can be used here. Here's an example:

call_when_scope_is_compiled.pm:

package call_when_scope_is_compiled; use Sub::ScopeFinalizer qw( scope_finalizer ); sub import { my ($class, $sub) = @_; $^H{__PACKAGE__ . '::'} = scope_finalizer { $sub->() }; } 1;
$ perl -E' say "post"; use call_when_scope_is_compiled \&foo; sub foo { say "foo!" } BEGIN { say "pre"; } ' pre foo! post

It also works for narrower scopes.

$ perl -E' { use call_when_scope_is_compiled \&foo; sub foo { say "foo!" } BEGIN { say "pre"; } } BEGIN { say "post"; } ' pre foo! post