## package Base.pm ### package Base; sub new { my $class = shift; my $self = {}; bless $self, $class; return $self; } sub display { my $self = shift; print "This is Base display \n"; } 1; ## package Derived.pm ## package Derived; @ISA = qw (Base); use Base; sub new { my $class = shift; my $self = {}; print "this is Derived new \n"; bless $self, $class; return $self; } sub display { my $self = shift; print "This is Derived display \n"; } 1 ## package Derived2.pm ### package Derived2; use Derived; @ISA = qw(Derived); use mro; sub new { my $class = shift; my $self = {}; bless $self, $class; return $self; } sub display { my $self = shift; print "This is Derived2 display \n"; } 1 ## Script.pl use strict; use warnings; use mro ; use Derived2; my $obj = Derived2->new(); $obj->display(); #working as expected my $gp = $obj->mro::get_linear_isa->[1]; my $gpm = $gp->can('display'); print "gp $gp |@$gp \n"; print "gp $gp |gpm $gpm \n"; $gp->display(); #does not work