use Attribute::Handlers; sub myattr :ATTR { my($func, $symbol, $code) = @_; no warnings 'redefine'; *{$symbol} = sub { print "Before\n"; $code->(); } } sub somefunc :myattr { print "somefunc!\n"; } somefunc();