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