has 'usr_manager' => ( is => 'rw', isa => 'UserManager', lazy_build => 1, handles => { list_users => 'list', load_user => 'load', }, ); has 'prod_manager' => ( is => 'rw', isa => 'ProductManager', lazy_build => 1, handles => { list_prods => 'list', load_prod => 'load', }, ); around qw(list_users load_user list_prods load_prod) => sub { my $orig = shift; my $self = shift; my $return_data; eval { $return_data = $self->$orig(@_); }; if (my $E = Exception::Class->caught('MyExeption')) { $E->rethrow(); } if ($@) { my $message = $self->truncate_err_msg($@); #Throw exception based on subroutine. } return $return_data; }; #### has 'prod_manager' => ( is => 'rw', isa => 'ProductManager', lazy_build => 1, handles => { list_prods => ['list' => 'Execption1'], load_prod => ['load' => 'Execption2'], }, );