On Mon, Dec 09, 2002 at 01:58:11PM -0800, Austin Hastings wrote: > --- Adam Turoff <[EMAIL PROTECTED]> wrote: > > I think you're trying to overoptimize something here. I can't see > > a benefit to caching only sometimes. If there is, then you probably > > want to implement a more sophisticated cache management strategy > > for your sub, not warp the language for a special case. > > Ahh. This is better. How does one implement a more sophisticated cache > management strategy?
By memoizing specific cases by hand, of course. :-) > That is, what is the mechanism for manipulating the run-time system > behavior of subs? Memoization does not have to involve manipulating runtime behavior. However, manipulating runtime behavior is a simple, generic and effective way to memoize random subs. Here's an example of a memoizing only the values for 'feb'. Schwern's solution is simpler and easier to read though. { ## start of a lexical scope to hide %feb_cache my %feb_cache; sub days_in_month(Str $month, Int $year) { $month = lc $month; if $month eq 'feb' { unless $feb_cache{$year} { my $leap = $year % 4 == 0 && ($year % 100 != 0 || $year % 400 == 0); $feb_cache{$year} = $leap ? 29 : 28; } return $feb_cache{$year}; } else { return %days{$month}; } } } Z.