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