All pastes #208334 Raw Edit

Something

public text v1 · immutable
#208334 ·published 2006-10-18 15:27 UTC
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;