use warnings; use strict; use Data::Dumper; use Wrap::Sub; my $ws = Wrap::Sub->new( pre => sub { print "\n$Wrap::Sub::name\n"; print "args:\n"; print Dumper \@_; }, post => sub { print "return:\n"; print Dumper $_[1][0]; } ); my @wrapped; for (qw(foo bar)){ push @wrapped, $ws->wrap($_); } foo(a => 1, b => 2); bar(10); sub foo { my %hash = @_; return [1, 2, 3]; } sub bar { my $x = shift; return $x ** 2; } #### main::foo args: $VAR1 = [ 'a', 1, 'b', 2 ]; return: $VAR1 = [ 1, 2, 3 ]; main::bar args: $VAR1 = [ 10 ]; return: $VAR1 = 100;