1*e0680481Safresh1use strict; use warnings; 2*e0680481Safresh1 3b39c5158Smillertpackage Memoize::Storable; 4*e0680481Safresh1our $VERSION = '1.16'; 5b39c5158Smillert 6*e0680481Safresh1use Storable 1.002 (); # for lock_* function variants 7b39c5158Smillert 8*e0680481Safresh1our $Verbose; 9b39c5158Smillert 10b39c5158Smillertsub TIEHASH { 11b39c5158Smillert my $package = shift; 12b39c5158Smillert my $filename = shift; 13*e0680481Safresh1 my $truehash = (-e $filename) ? Storable::lock_retrieve($filename) : {}; 14b39c5158Smillert my %options; 15b39c5158Smillert print STDERR "Memoize::Storable::TIEHASH($filename, @_)\n" if $Verbose; 16*e0680481Safresh1 @options{@_} = (1) x @_; 17b39c5158Smillert my $self = 18b39c5158Smillert {FILENAME => $filename, 19b39c5158Smillert H => $truehash, 20b39c5158Smillert OPTIONS => \%options 21b39c5158Smillert }; 22b39c5158Smillert bless $self => $package; 23b39c5158Smillert} 24b39c5158Smillert 25b39c5158Smillertsub STORE { 26b39c5158Smillert my $self = shift; 27b39c5158Smillert print STDERR "Memoize::Storable::STORE(@_)\n" if $Verbose; 28b39c5158Smillert $self->{H}{$_[0]} = $_[1]; 29b39c5158Smillert} 30b39c5158Smillert 31b39c5158Smillertsub FETCH { 32b39c5158Smillert my $self = shift; 33b39c5158Smillert print STDERR "Memoize::Storable::FETCH(@_)\n" if $Verbose; 34b39c5158Smillert $self->{H}{$_[0]}; 35b39c5158Smillert} 36b39c5158Smillert 37b39c5158Smillertsub EXISTS { 38b39c5158Smillert my $self = shift; 39b39c5158Smillert print STDERR "Memoize::Storable::EXISTS(@_)\n" if $Verbose; 40b39c5158Smillert exists $self->{H}{$_[0]}; 41b39c5158Smillert} 42b39c5158Smillert 43b39c5158Smillertsub DESTROY { 44b39c5158Smillert my $self= shift; 45b39c5158Smillert print STDERR "Memoize::Storable::DESTROY(@_)\n" if $Verbose; 46b39c5158Smillert if ($self->{OPTIONS}{'nstore'}) { 47*e0680481Safresh1 Storable::lock_nstore($self->{H}, $self->{FILENAME}); 48b39c5158Smillert } else { 49*e0680481Safresh1 Storable::lock_store($self->{H}, $self->{FILENAME}); 50b39c5158Smillert } 51b39c5158Smillert} 52b39c5158Smillert 53b39c5158Smillertsub FIRSTKEY { 54b39c5158Smillert 'Fake hash from Memoize::Storable'; 55b39c5158Smillert} 56b39c5158Smillert 57b39c5158Smillertsub NEXTKEY { 58b39c5158Smillert undef; 59b39c5158Smillert} 60*e0680481Safresh1 61b39c5158Smillert1; 62*e0680481Safresh1 63*e0680481Safresh1__END__ 64*e0680481Safresh1 65*e0680481Safresh1=pod 66*e0680481Safresh1 67*e0680481Safresh1=head1 NAME 68*e0680481Safresh1 69*e0680481Safresh1Memoize::Storable - store Memoized data in Storable database 70*e0680481Safresh1 71*e0680481Safresh1=head1 DESCRIPTION 72*e0680481Safresh1 73*e0680481Safresh1See L<Memoize>. 74*e0680481Safresh1 75*e0680481Safresh1=cut 76