use strict; package Super; sub new { return bless {}, shift; } sub dostuff { print "In Parent dostuff -- caller: ", join('|', caller()), "\n"; } package Child; our @ISA = qw(Super); sub dostuff { my $self = @_[0]; print "In Child dostuff -- caller: ", join('|', caller()), "\n"; local *SAVE = *Child::dostuff; undef *Child::dostuff; my $method = $self->SUPER::can('dostuff'); *Child::dostuff = *SAVE; goto(&$method); } package main; my $x = Child->new(); $x->dostuff(); $x->dostuff();