NAME
Sub::WrapPackages - add pre- and post-execution wrappers around all the subroutines in packages or around individual subs
SYNOPSIS
use Sub::WrapPackages (
packages => [qw(Foo Bar)], # wrap all Foo::* and Bar::*
subs => [qw(Baz::a, Baz::b)], # wrap these two subs as well
pre => sub {
print "called $_[0] with params ".
join(', ', @_[1..$#_])."\n";
},
post => sub {
print "$_[0] returned $_[1]\n";
},
DESCRIPTION
This is mostly a wrapper around Damian Conway's Hook::LexWrap module. Please go and read the docs for that module now. The differences are:
- no exporting
-
We don't export a wrap() function, instead preferring to do all the magic when you
use
this module. We just wrap named subroutines, no references. I didn't need that functionality so although it's probably available if you look at the source I haven't tested it. Patches welcome! - the subs and packages arrayrefs
-
In the synopsis above, you will see two named parameters,
subs
andpackages
. Any subroutine mentioned insubs
will be wrapped. Any packages mentioned inpackages
will have all their subroutines wrapped. We divine which subs to wrap in a package with the_get_syms
method from Richard Clamp's Pod::Coverage module. Yes, it's documented as being unstable. Caveat User. - parameters passed to your subs
-
I threw Damian's ideas out of the window. Instead, your pre-wrapper will be passed the wrapped subroutine's name, and all the parameters to be passed to it. Who knows what will happen if you modify those params, I don't need that so haven't tested it. Patches welcome!
The post-wrapper will be passed the wrapped subroutine's name, and a single parameter for the return value(s) as in Damian's module. Figuring out the difference between returning an array and returning a reference to an array is left as an exercise for the interested reader.
BUGS
Wrapped subroutines may cause perl 5.6.1, and maybe other versions, to segfault when called in void context. I believe this is a bug in Hook::LexWrap.
I say "patches welcome" a lot.
AUTOLOAD and DESTROY are not treated as being special.
FEEDBACK
I like to know who's using my code. All comments, including constructive criticism, are welcome. Please email me.
AUTHOR
David Cantrell <david@cantrell.org.uk>
Thanks also to Adam Trickett who thought this was a jolly good idea.
COPYRIGHT
Copyright 2003 David Cantrell
This module is free-as-in-speech software, and may be used, distributed, and modified under the same terms as Perl itself.