Beefy Boxes and Bandwidth Generously Provided by pair Networks
Clear questions and runnable code
get the best and fastest answer
 
PerlMonks  

Re: Dynamic object extensions

by ton (Friar)
on Nov 03, 2001 at 09:12 UTC ( [id://123009]=note: print w/replies, xml ) Need Help??


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

Log In?
Username:
Password:

What's my password?
Create A New User
Domain Nodelet?
Node Status?
node history
Node Type: note [id://123009]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this?Last hourOther CB clients
Other Users?
Others admiring the Monastery: (5)
As of 2024-04-16 12:38 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found