Cache-AgainstFile
view release on metacpan or search on metacpan
lib/Cache/AgainstFile/Storable.pm view on Meta::CPAN
363738394041424344454647484950515253545556
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
184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215
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.276 second using v1.01-cache-2.11-cpan-3cd7ad12f66 )