This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
Cleanup utf8_heavy; allow dropping the In prefix from
[perl5.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 $VERSION = 0.65;
15 $Verbose = 0;
16
17 sub 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
33 sub 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
40 sub 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
47 sub 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
54 sub 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
65 sub FIRSTKEY {
66   'Fake hash from Memoize::Storable';
67 }
68
69 sub NEXTKEY {
70   undef;
71 }
72 1;