$self->SomeClass::method(...); #### #!/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; #### sub foo { my $class = shift; print __PACKAGE__, "\n"; require mro; my $grandparent = $class->mro::get_linear_isa->[2]; my $gp_method = $grandparent->can('foo'); $class->$gp_method(@_); } #### sub foo { my $class = shift; print __PACKAGE__, "\n"; require mro; $class->${\ $class->mro::get_linear_isa->[2]->can("foo") }(@_); }