use SUPERB; package Base; sub foo { print "Base::foo\n"; } sub bar { print "Base::bar\n"; } sub baz { print "Base::baz\n"; } package A; @ISA = qw/Base/; sub foo { print "A::foo\n"; } package B; @ISA = qw/Base/; sub bar { print "B::bar\n"; } package C; @ISA = qw/A B/; sub foo { print "C::foo\n"; shift->SUPERB::foo; } sub bar { print "C::bar\n"; shift->SUPERB::bar; } sub baz { print "C::baz\n"; shift->SUPERB::baz; } package main; my $c = bless [], 'C'; $c->foo; $c->bar; $c->baz; __OUTPUT__ C::foo A::foo C::bar B::bar C::baz Base::baz