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.
My criteria for good software:
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:
- Does it work?
- Can someone else come in, make a change, and be reasonably certain no bugs were introduced?
In Section
Meditations