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