X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FMemoize%2FExpireFile.pm;h=e52c09a3bf33715a1447c47a13a139da123d85c5;hb=29ddfe354327d85ef66e9723b006d41eb553cd25;hp=22e4d67b9990747091334810023b593540d6a55c;hpb=9038e305e40aa7aacfc52a55cb7265c4f175011b;p=p5sagit%2Fp5-mst-13.2.git diff --git a/lib/Memoize/ExpireFile.pm b/lib/Memoize/ExpireFile.pm index 22e4d67..e52c09a 100644 --- a/lib/Memoize/ExpireFile.pm +++ b/lib/Memoize/ExpireFile.pm @@ -10,29 +10,20 @@ See L. =cut +$VERSION = 1.01; use Carp; +my $Zero = pack("N", 0); + sub TIEHASH { my ($package, %args) = @_; - my %cache; - if ($args{TIE}) { - my ($module, @opts) = @{$args{TIE}}; - my $modulefile = $module . '.pm'; - $modulefile =~ s{::}{/}g; - eval { require $modulefile }; - if ($@) { - croak "Memoize::ExpireFile: Couldn't load hash tie module `$module': $@; aborting"; - } - my $rc = (tie %cache => $module, @opts); - unless ($rc) { - croak "Memoize::ExpireFile: Couldn't tie hash to `$module': $@; aborting"; - } - } - bless {ARGS => \%args, C => \%cache} => $package; + my $cache = $args{HASH} || {}; + bless {ARGS => \%args, C => $cache} => $package; } sub STORE { +# print "Expiry manager STORE handler\n"; my ($self, $key, $data) = @_; my $cache = $self->{C}; my $cur_date = pack("N", (stat($key))[9]); @@ -46,13 +37,16 @@ sub FETCH { } sub EXISTS { +# print "Expiry manager EXISTS handler\n"; my ($self, $key) = @_; - my $old_date = $self->{C}{"T$key"} || "0"; - my $cur_date = pack("N", (stat($key))[9]); - if ($self->{ARGS}{CHECK_DATE} && $old_date gt $cur_date) { - return $self->{ARGS}{CHECK_DATE}->($key, $old_date, $cur_date); - } - return $old_date ge $cur_date; + my $cache_date = $self->{C}{"T$key"} || $Zero; + my $file_date = pack("N", (stat($key))[9]);# +# if ($self->{ARGS}{CHECK_DATE} && $old_date gt $cur_date) { +# return $self->{ARGS}{CHECK_DATE}->($key, $old_date, $cur_date); +# } + my $res = $cache_date ge $file_date; +# print $res ? "... still good\n" : "... expired\n"; + $res; } 1;