# Based on: http://perldoc.perl.org/perlobj.html
use strict;
use warnings;
use parent;
use 5.014;
package A;
sub new {
return bless {}, shift;
}
sub speak {
say 'A::speak: entered';
my $self = shift;
# $self->SUPER::speak();
say 'A';
say 'A::speak: leaving';
}
package B;
use parent -norequire, 'A';
sub speak {
say 'B::speak: entered';
my $self = shift;
$self->SUPER::speak();
say 'B';
say 'B::speak: leaving';
}
package C;
use parent -norequire, 'B';
sub speak {
say 'C::speak: entered';
my $self = shift;
$self->SUPER::speak();
say 'C';
say 'C::speak: leaving';
}
my $c = C->new();
say 'calling C::speak';
$c->speak();
say 'returned from C::speak';