$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") }(@_);
}