rendered paste body{
package Foo;
sub init_stuff {
my ($class) = @_;
print " - setting up $class\n";
{
no strict 'refs';
*{"$class\::run"} =
sub {
my ($self) = @_;
my $local_class = ref($self);
print "class is $local_class, package is : " . __PACKAGE__ . "\n";
print "EVALUATING : " . qq{ package $local_class; \$self->SUPER::run() };
eval qq{ package $local_class; \$self->SUPER::run() };
print "class is $local_class, package is : " . __PACKAGE__ . "\n";
};
}
}
sub new {
my ($class) = @_;
bless {}, $class;
}
sub run {
my $self = shift;
print "package is : " . __PACKAGE__ . "\n";
print "now going down\n";
print "package is : " . __PACKAGE__ . "\n";
}
}
{
package Foo::Bar;
use base qw(Foo);
__PACKAGE__->init_stuff();
}
{
package Foo::Bar::Baz;
use base qw(Foo::Bar);
__PACKAGE__->init_stuff();
}
{
package Foo::Bar::Baz::Mod;
use base qw(Foo::Bar::Baz);
__PACKAGE__->init_stuff();
}
my $obj = Foo::Bar::Baz::Mod->new();
$obj->run;