#!/usr/bin/env perl use strict; use warnings; { package Animal; sub foo { my $class = shift; print __PACKAGE__, "\n"; } } { package Mammal; use base "Animal"; sub foo { my $class = shift; print __PACKAGE__, "\n"; $class->SUPER::foo(@_); } } { package Primate; use base "Mammal"; sub foo { my $class = shift; print __PACKAGE__, "\n"; $class->SUPER::foo(@_); } } { package Monkey; use base "Primate"; sub foo { my $class = shift; print __PACKAGE__, "\n"; $class->Mammal::foo(@_); # skip over Primate::foo } } Monkey->foo;