Cache-AgainstFile
view release on metacpan or search on metacpan
lib/Cache/AgainstFile/Storable.pm view on Meta::CPAN
my ($loader, $options) = @_;
my $self = $class->SUPER::new(@_);
my $dir = $self->{options}->{CacheDir} || croak("You must supply a cache directory for caching with Storable");
check_safe($dir,"w") if(HAVE_FILE_POLICY);
_create_dir_if_required($dir);
#Select locking implementation
my $locking = $options->{Locking} || 'AtomicWrite';
if($locking eq 'Flock') {
$self->{write} = \&_write_locked;
$self->{read} = \&_read_locked;
} elsif ($locking eq 'AtomicWrite') {
$self->{write} = \&_write_atomic;
$self->{read} = \&_read;
} else {
croak("Unrecognised locking model '$locking'");
}
return $self;
}
lib/Cache/AgainstFile/Storable.pm view on Meta::CPAN
my @files = grep {$_ !~ /^\./} readdir(FH);
closedir FH;
DUMP("cache files", \@files);
return \@files;
}
#
# Subroutines
#
sub _read_locked {
my($cache_filename, $fh) = @_;
# we don't want the filehandle. Suppose it might need to be closed
# under Win32? Close it anyway
$fh->close if $fh;
check_safe($cache_filename,"r") if(HAVE_FILE_POLICY);
my $ref_data = lock_retrieve($cache_filename);
TRACE("Fetched from cache file: $cache_filename");
return $$ref_data;
}
sub _write_locked {
my ($cache_filename, $data, $mtime) = @_;
check_safe($cache_filename,"w") if(HAVE_FILE_POLICY);
lock_store(\$data, $cache_filename);
TRACE("wrote cache file: $cache_filename");
_backtouch($cache_filename, $mtime);
}
sub _write_atomic {
my ($cache_filename, $data, $mtime) = @_;
check_safe($cache_filename,"w") if(HAVE_FILE_POLICY);
( run in 0.583 second using v1.01-cache-2.11-cpan-49f99fa48dc )