use v5.14; package Person { use Moose; has first_name => (is => 'rw', isa => 'Str'); has last_name => (is => 'rw', isa => 'Str'); sub set_name { my $self = shift; my ($first, $last) = @_; $self->first_name($first); $self->last_name($last); } } package LoudNameChanges { use Moose::Role; around set_name => sub { my $orig = shift; my $self = shift; say "Changing name to: @_"; $self->$orig(@_); }; } package Person::LoudNameChanges { use Moose; extends 'Person'; with 'LoudNameChanges'; } my $bob = Person::LoudNameChanges->new( first_name => 'Robert', last_name => 'Smith', ); $bob->set_name('David', 'Jones'); print $bob->dump;