$obj = new theModule; $obj->funcA('own'); $obj->funcA('X'); $obj->funcA('SUPER'); package theModule; BEGIN { @ISA = 'Y'; } sub new { my %self; return bless \%self, shift; } sub funcA { my $self = shift; my $param = shift; print "\nfuncA in theModule got called, param = $param\n"; if($param eq 'own') { $self->funcB; } elsif($param eq 'X') { $self->X::funcB; } elsif($param eq 'SUPER') { $self->SUPER::funcB; } } sub funcB { my $self = shift; print "funcB in theModule is called\n"; } package X; sub funcB { my $self = shift; print "funcB in X is called\n"; } package Y; sub funcB { my $self = shift; print "funcB in Y is called\n"; }