Integrate Memoize 0.64. Few tweaks were required in
[p5sagit/p5-mst-13.2.git] / lib / Memoize / Storable.pm
CommitLineData
a0cb3900 1
2package Memoize::Storable;
3use Storable ();
4$Verbose = 0;
5
6sub TIEHASH {
7 require Carp if $Verbose;
8 my $package = shift;
9 my $filename = shift;
10 my $truehash = (-e $filename) ? Storable::retrieve($filename) : {};
11 my %options;
12 print STDERR "Memoize::Storable::TIEHASH($filename, @_)\n" if $Verbose;
13 @options{@_} = ();
14 my $self =
15 {FILENAME => $filename,
16 H => $truehash,
17 OPTIONS => \%options
18 };
19 bless $self => $package;
20}
21
22sub STORE {
23 require Carp if $Verbose;
24 my $self = shift;
25 print STDERR "Memoize::Storable::STORE(@_)\n" if $Verbose;
26 $self->{H}{$_[0]} = $_[1];
27}
28
29sub FETCH {
30 require Carp if $Verbose;
31 my $self = shift;
32 print STDERR "Memoize::Storable::FETCH(@_)\n" if $Verbose;
33 $self->{H}{$_[0]};
34}
35
36sub EXISTS {
37 require Carp if $Verbose;
38 my $self = shift;
39 print STDERR "Memoize::Storable::EXISTS(@_)\n" if $Verbose;
40 exists $self->{H}{$_[0]};
41}
42
43sub DESTROY {
44 require Carp if $Verbose;
45 my $self= shift;
46 print STDERR "Memoize::Storable::DESTROY(@_)\n" if $Verbose;
47 if ($self->{OPTIONS}{'nstore'}) {
48 Storable::nstore($self->{H}, $self->{FILENAME});
49 } else {
50 Storable::store($self->{H}, $self->{FILENAME});
51 }
52}
53
54sub FIRSTKEY {
55 'Fake hash from Memoize::Storable';
56}
57
58sub NEXTKEY {
59 undef;
60}
611;