in reply to Trapping calls to existing Perl subs?

Perl 6 has a new .wrap method just for this sort of thing.

In Perl 5, this technique comes to my (sleepy) mind:

use strict; use warnings; sub greet { my ($name) = @_; print "Hi, $name!\n" or return 'Shame :('; return 'Glory !'; } sub wrap_the_sub { my ($sub_name) = @_; my $sub_ref = \&{$sub_name}; my $wrapping_sub = sub { my @args = @_; print "Entering '$sub_name'\n"; my $rc = $sub_ref->(@args); print "Exiting '$sub_name'\n"; # Really need some wantarray() trick there... return $rc; }; no strict 'refs'; no warnings 'redefine'; *{$sub_name} = $wrapping_sub; } wrap_the_sub('greet'); my $result = greet('Util'); print "Result was: '$result'\n";
Output:
Entering 'greet' Hi, Util! Exiting 'greet' Result was: 'Glory !'