Beefy Boxes and Bandwidth Generously Provided by pair Networks
Welcome to the Monastery

Re^3: A general method of locally overriding subroutines

by dragonchild (Archbishop)
on Mar 11, 2006 at 13:20 UTC ( #535940=note: print w/replies, xml ) Need Help??

in reply to Re^2: A general method of locally overriding subroutines
in thread A general method of locally overriding subroutines

Even so, it's easier to understand than the nested-subroutines solution.

More importantly, the stackdump is more easily understood.

I wonder if anybody out there has got something even simpler.

I would hope there's something better than that. For one thing, my version doesn't allow each function to be a closure. Though, that's easy enough to fix, I suppose.

sub localize { my $real = pop; no strict 'refs'; no warnings 'redefine'; goto CALL unless @_; AGAIN: my $v = shift; local *{$v} = do { my $v2 = $v; sub { "changed $v2" } }; goto AGAIN if @_; CALL: $real->(); }

My criteria for good software:
  1. Does it work?
  2. Can someone else come in, make a change, and be reasonably certain no bugs were introduced?

Log In?

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

How do I use this? | Other CB clients
Other Users?
Others taking refuge in the Monastery: (2)
As of 2020-10-25 03:39 GMT
Find Nodes?
    Voting Booth?
    My favourite web site is:

    Results (248 votes). Check out past polls.