http://qs321.pair.com?node_id=535940


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?