#!/usr/bin/perl use warnings; use strict; use Attribute::Handlers; sub log : ATTR(CODE) { my ($pkg, $sym, $code) = @_; no strict 'refs'; no warnings 'redefine'; # # Install log handler # my $name = *{ $sym }{NAME}; warn "installing log handler for $pkg\:\:$name"; *{$pkg . '::' . $name} = sub { warn "BEGIN sub block...$pkg\:\:$name\n"; my @rv = $code->(@_); warn "END sub block...$pkg\:\:$name\n\n"; return @rv; } } sub something : log { print "I'm doing something with @_.\n"; return 42; } my ($result) = something(qw/foo bar/); print "result: $result\n";