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...