# # This software is Copyright 2005 by Elsevier Inc. You may use it # under the terms of the license at http://perl.plover.com/hop/LICENSE.txt . # ### ### memoize-normalize3 ### ## Chapter 3 section 7 sub memoize { my ($func, $keygen) = @_; $keygen ||= q{join ',', @_}; my %cache; my $newcode = q{ sub { my $key = do { KEYGEN }; $cache{$key} = $func->(@_) unless exists $cache{$key}; return $cache{$key}; } }; $newcode =~ s/KEYGEN/$keygen/g; return eval $newcode; }