sub doit {
my( $self, $a, $b ) = @_;
$self->{thing} += $a;
$self->{thing} *= $b;
}
####
sub doit {
my( $self, $a, $b ) = @_;
$self->_validate_self( __PACKAGE__ );
$self->{validators}{'doit_a'}->( $a );
$self->{validators}{'doit_b'}->( $b );
$self->{befores}{'doit'}->( $self, $a, $b );
my( @results ) = $self->{arounds}{'doit'}->( $self->{setters}{doit}, $self, $a, $b );
$self->{afters}{'doit'}->( $self, $a, $b );
return @results;
}
##
##
sub doit {
my( $self, $a, $b ) = @_;
die unless $self =~ __PACKAGE__ and look_likenumber( $a ) and looks_like_number( $b );
## do some stuff before
$self->{thing} += $a;
$self->{thing} *= $b;
## do some stuff after
return $self->{thing};
}
##
##
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