sub foo {
log_msg("In subroutine foo") if $DEBUG
}
####
package Foo;
use strict;
use warnings;
use Attribute::Handlers;
sub _log : ATTR(CODE) {
my ($package, $symbol) = @_;
{
no strict 'refs';
no warnings 'redefine';
my $name = *{ $symbol }{NAME};
my $code = \&{ $package . '::' . $name };
*{ $package . '::' . $name } = sub {
my $self = shift;
print "Entering sub $name\n";
$code->( $self, @_ );
};
}
}
sub foo : _log {
my $self = shift;
print "in foo\n";
}
1;
####
Entering sub foo
in foo
####
sub rm_secret_stuff : _authz(admin) {
...
}