##
package B;
use base 'A';
sub doit {
my $self = shift;
warn 'B::doit';
$self->SUPER::doit();
}
1;
####
package C;
use base 'B';
1;
####
package D;
sub new {
bless {}, shift;
}
sub doit {
my $self = shift;
warn 'D::doit';
}
1;
####
use C;
my $c = new C;
$c->doit();
####
use C;
use D;
unshift @C::ISA, 'D';
*C::doit = \&B::doit;
my $c = new C;
$c->doit();