in reply to Dynamic object extensions

Have you considered evaling the subroutines you want to overwrite? For example, here is a class that can have its foo method overwritten:
package MyPack; use strict; sub new($$) { my $invocant = shift; my $class = ref($invocant) || $invocant; my $self = { }; bless($self, $class); return $self; } sub foo($) { my $self = shift; print "foo is unmodified.\n"; } sub changeFoo($) { my $line; my $code; while ($line = <DATA>) { $code .= $line; } eval $code; } 1; __DATA__ sub foo($) { my $self = shift; print "foo has been modified.\n"; }
Here's some code to test it:
use MyPack; use strict; my $obj = MyPack->new(); $obj->foo(); $obj->changeFoo(); $obj->foo();
The output is
foo is unmodified. foo has been modified.
Of course, there's no reason for the changing code to be in DATA; it can just as easily be in a seperate file.

-ton
-----
Be bloody, bold, and resolute; laugh to scorn
The power of man...