23 lines
371 B
Plaintext
23 lines
371 B
Plaintext
|
|
|
|
###
|
|
### 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;
|
|
}
|