use Data::Dumper;
{
package Foo;
sub new {
my ($class) = @_;
{
no strict 'refs';
*{"$class\::run"} =
sub {
my $self = shift;
my $class = ref($self);
print "in $class, but in " . __PACKAGE__ . " \n";
$self->SUPER::run();
print "in $class \n";
};
}
bless {}, $class;
}
sub run {
my $self = shift;
print "in " . __PACKAGE__ . "\n";
print "now going down\n";
print "in " . __PACKAGE__ . "\n";
}
}
{
package Foo::Bar;
use base qw(Foo);
}
{
package Foo::Bar::Baz;
use base qw(Foo::Bar);
}
{
package Foo::Bar::Baz::Mod;
use base qw(Foo::Bar::Baz);
}
my $obj = Foo::Bar::Baz::Mod->new();
$obj->run;