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