Update: The problem description below is incorrect, but the design question is still appropriate. See
1149699 for a solution.
The problem you are hitting is that there is no guaranteed time for garbage collection. Therefore, garbage collection hasn't happen on the very short time scale for your test.
For the demo case, the simplest way of getting your desired output would be localizing, e.g.,
print One::foo();
{
my $count = Count->new;
no warnings 'redefine';
local *One::foo = sub { $count->{x} = 'x'; return "baz\n"; };
print One::foo();
}
print One::foo();
You could also use mock to bless into a subclass
One::Debug that looks like:
package One::Debug;
our @ISA = 'One';
sub foo {
return "baz\n";
}
1;
Really, what's going on here is a bit of an
XY Problem. You need to think on how to best encapsulate your patching to cover only your particular problem.
Incidentally, what you are trying use is traditionally called a guard. At least, I think that's what you are trying to do...
#11929 First ask yourself `How would I do this without a computer?' Then have the computer do it the same way.
Posts are HTML formatted. Put <p> </p> tags around your paragraphs. Put <code> </code> tags around your code and data!
Titles consisting of a single word are discouraged, and in most cases are disallowed outright.
Read Where should I post X? if you're not absolutely sure you're posting in the right place.
Please read these before you post! —
Posts may use any of the Perl Monks Approved HTML tags:
- a, abbr, b, big, blockquote, br, caption, center, col, colgroup, dd, del, details, div, dl, dt, em, font, h1, h2, h3, h4, h5, h6, hr, i, ins, li, ol, p, pre, readmore, small, span, spoiler, strike, strong, sub, summary, sup, table, tbody, td, tfoot, th, thead, tr, tt, u, ul, wbr
You may need to use entities for some characters, as follows. (Exception: Within code tags, you can put the characters literally.)
| |
For: |
|
Use: |
| & | | & |
| < | | < |
| > | | > |
| [ | | [ |
| ] | | ] |
Link using PerlMonks shortcuts! What shortcuts can I use for linking?
See Writeup Formatting Tips and other pages linked from there for more info.