xref: /openbsd-src/gnu/usr.bin/perl/cpan/Memoize/Memoize/Storable.pm (revision e068048151d29f2562a32185e21a8ba885482260)
1*e0680481Safresh1use strict; use warnings;
2*e0680481Safresh1
3b39c5158Smillertpackage Memoize::Storable;
4*e0680481Safresh1our $VERSION = '1.16';
5b39c5158Smillert
6*e0680481Safresh1use Storable 1.002 (); # for lock_* function variants
7b39c5158Smillert
8*e0680481Safresh1our $Verbose;
9b39c5158Smillert
10b39c5158Smillertsub TIEHASH {
11b39c5158Smillert  my $package = shift;
12b39c5158Smillert  my $filename = shift;
13*e0680481Safresh1  my $truehash = (-e $filename) ? Storable::lock_retrieve($filename) : {};
14b39c5158Smillert  my %options;
15b39c5158Smillert  print STDERR "Memoize::Storable::TIEHASH($filename, @_)\n" if $Verbose;
16*e0680481Safresh1  @options{@_} = (1) x @_;
17b39c5158Smillert  my $self =
18b39c5158Smillert    {FILENAME => $filename,
19b39c5158Smillert     H => $truehash,
20b39c5158Smillert     OPTIONS => \%options
21b39c5158Smillert    };
22b39c5158Smillert  bless $self => $package;
23b39c5158Smillert}
24b39c5158Smillert
25b39c5158Smillertsub STORE {
26b39c5158Smillert  my $self = shift;
27b39c5158Smillert  print STDERR "Memoize::Storable::STORE(@_)\n" if $Verbose;
28b39c5158Smillert  $self->{H}{$_[0]} = $_[1];
29b39c5158Smillert}
30b39c5158Smillert
31b39c5158Smillertsub FETCH {
32b39c5158Smillert  my $self = shift;
33b39c5158Smillert  print STDERR "Memoize::Storable::FETCH(@_)\n" if $Verbose;
34b39c5158Smillert  $self->{H}{$_[0]};
35b39c5158Smillert}
36b39c5158Smillert
37b39c5158Smillertsub EXISTS {
38b39c5158Smillert  my $self = shift;
39b39c5158Smillert  print STDERR "Memoize::Storable::EXISTS(@_)\n" if $Verbose;
40b39c5158Smillert  exists $self->{H}{$_[0]};
41b39c5158Smillert}
42b39c5158Smillert
43b39c5158Smillertsub DESTROY {
44b39c5158Smillert  my $self= shift;
45b39c5158Smillert  print STDERR "Memoize::Storable::DESTROY(@_)\n" if $Verbose;
46b39c5158Smillert  if ($self->{OPTIONS}{'nstore'}) {
47*e0680481Safresh1    Storable::lock_nstore($self->{H}, $self->{FILENAME});
48b39c5158Smillert  } else {
49*e0680481Safresh1    Storable::lock_store($self->{H}, $self->{FILENAME});
50b39c5158Smillert  }
51b39c5158Smillert}
52b39c5158Smillert
53b39c5158Smillertsub FIRSTKEY {
54b39c5158Smillert  'Fake hash from Memoize::Storable';
55b39c5158Smillert}
56b39c5158Smillert
57b39c5158Smillertsub NEXTKEY {
58b39c5158Smillert  undef;
59b39c5158Smillert}
60*e0680481Safresh1
61b39c5158Smillert1;
62*e0680481Safresh1
63*e0680481Safresh1__END__
64*e0680481Safresh1
65*e0680481Safresh1=pod
66*e0680481Safresh1
67*e0680481Safresh1=head1 NAME
68*e0680481Safresh1
69*e0680481Safresh1Memoize::Storable - store Memoized data in Storable database
70*e0680481Safresh1
71*e0680481Safresh1=head1 DESCRIPTION
72*e0680481Safresh1
73*e0680481Safresh1See L<Memoize>.
74*e0680481Safresh1
75*e0680481Safresh1=cut
76