I was just playing around with Memoize::Expire and did a one line test. It worked as expected when I use "print f().$/" but does not expire the memoized function f() when I use "say f();"
perl -MMemoize -MMemoize::Expire -E "sub f {int rand 100}; tie my %cache => 'Memoize::Expire',LIFETIME=>2; memoize 'f',SCALAR_CACHE => [HASH => \%cache ]; for (1..10) {print f().$/; sleep 1}" 16 16 95 95 61 61 62 62 93 93 perl -MMemoize -MMemoize::Expire -E "sub f {int rand 100}; tie my %cache => 'Memoize::Expire',LIFETIME=>2; memoize 'f',SCALAR_CACHE => [HASH => \%cache ]; for (1..10) {say f(); sleep 1}" 89 89 89 89 89 89 89 89 89 89
After a bit of tracking down I found it only works when the function is called in scalar context. For instance say f()+0; works fine.
I tried altering my invocation of memoize to use LIST_CACHE rather than SCALAR_CACHE but then it crashes
Can't use string ("ARRAY(0x9c7494)") as an ARRAY ref while "strict refs" in use at C:/Perl516/lib/Memoize.pm line 258.Does anyone know if Memoize::Expire can be got to work in list context? Or do I have to roll my own if I need that
Cheers,
R.
In reply to Memoize::Expire oddity by Random_Walk
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |