package Parent; use Moose; sub rant { printf " RANTING!\n" } before 'rant' => sub { printf " In %s before\n", __PACKAGE__ }; after 'rant' => sub { printf " In %s after\n", __PACKAGE__ }; around 'rant' => sub { my $orig = shift; my $self = shift; printf " In %s around before calling original\n", __PACKAGE__; $self->$orig; printf " In %s around after calling original\n", __PACKAGE__; }; 1; package Child; use Moose; extends 'Parent'; before 'rant' => sub { printf "In %s before\n", __PACKAGE__ }; after 'rant' => sub { printf "In %s after\n", __PACKAGE__ }; around 'rant' => sub { my $orig = shift; my $self = shift; printf " In %s around before calling original\n", __PACKAGE__; $self->$orig; printf " In %s around after calling original\n", __PACKAGE__; }; 1; In Child before In Child around before calling original In Parent before In Parent around before calling original RANTING! In Parent around after calling original In Parent after In Child around after calling original In Child after