{ package User; use Moose; has name => (is => 'ro', isa => 'Str'); sub login { my $self = shift; print $self->name, " is logged in\n"; } } { package Tracing; use MooseX::Aspect; my $aspect = __PACKAGE__; sub log_msg { my $class = shift; print STDERR "TRACE: $_\n" for @_; } apply_to 'User' => role { before login => sub { my $self = shift; $aspect->log_msg($self->name . " attempted to log in"); }; }; } # try setting tracing to 0 :-) my $config = { tracing => 1 }; if ($config->{tracing}) { Tracing->setup; } my $bob = User->new( name => 'Bob' ); $bob->login;