package Animal;
use Moose;
sub speak {
my $self = shift;
print 'A ', ref $self, ' goes ', $self->sound() . "\n";
}
1;
package Danger;
use Moose;
sub speak {
my $self = shift;
print 'through an eye patch ...' . "\n";
}
1;
package Mouse;
use Moose;
extends qw(Animal Danger);
has 'sound' => (is => 'rw', default => 'squeek');
after 'speak' => sub {
my $self = shift;
print '[but you can barely hear it!]' . "\n";
};
1;
package main;
my $danger_mouse = Mouse->new();
$danger_mouse->speak();
1;
####
A Mouse goes squeek
[but you can barely hear it!]
####
package Animal;
use Class::Std;
{
sub speak : CUMULATIVE(BASE FIRST) {
my $self = shift;
print 'A ', ref $self, ' goes ', $self->get_sound() . "\n";
}
}
1;
package Danger;
use Class::Std;
{
sub speak : CUMULATIVE(BASE FIRST) {
my $self = shift;
print 'through an eye patch ...' . "\n";
}
}
1;
package Mouse;
use Class::Std;
use base qw(Animal Danger);
{
my %sound : ATTR( :name, :default );
sub speak : CUMULATIVE(BASE FIRST) {
my $self = shift;
print '[but you can barely hear it!]' . "\n";
}
}
1;
####
A Mouse goes squeek
through an eye patch ...
[but you can barely hear it!]
####
package Animal;
use Moose;
sub speak {
my $self = shift;
print 'A ', ref $self, ' goes ', $self->sound() . "\n";
}
1;
package Danger;
use Moose::Role;
requires 'speak';
after 'speak' => sub {
my $self = shift;
print 'through an eye patch ...' . "\n";
};
1;
package Mouse;
use Moose;
extends 'Animal';
with 'Danger';
has 'sound' => (is => 'rw', default => 'squeek');
after 'speak' => sub {
my $self = shift;
print '[but you can barely hear it!]' . "\n";
};
1;
package main;
my $danger_mouse = Mouse->new();
$danger_mouse->speak();
1;