sub current_balance { my $self = shift; if (@_) { my $new = shift; croak "not a number" unless Scalar::Util::looks_like_number($new); $self->{current_balance} = $new; } return $self->{current_balance}; } #### has current_balance => (is => 'rw', isa => 'Num'); #### package DebuggingDB; use Moose; foreach my $method (qw/select insert update delete/) { before $method => sub { warn "$method was called" }; } #### package DebuggingDB; use Moose::Role; foreach my $method (qw/select insert update delete/) { before $method => sub { warn "$method was called" }; } #### use Moose::Util qw/apply_all_roles/; apply_all_roles('DB', 'DebuggingDB') if $ENV{DEBUG}; #### my $accounts = DB->new(...); my $marketing = DB->new(...); use Moose::Util qw/apply_all_roles/; apply_all_roles($marketing, 'DebuggingDB') if $ENV{DEBUG};