我正在使用WWW::Mechanize::Cached和Cache :: FileCache,我有时会从缓存中删除某些URL,但WWW :: Mechanize :: Cached没有这样的选项。
我查看了源代码,可以看到缓存是使用以下行设置的:
$self->cache->set( $req, freeze( $response ) ) if $should_cache;
所以我尝试使用以下代码从缓存中删除项目:
$cache->remove($mech->response->request) or warn "cannot remove $!";
或
$cache->remove($mech->response->request->as_string) or warn "cannot remove $!";
但是我收到警告:“无法删除没有这样的文件或目录”。
我也发现了以下想法,但似乎都没有效果 https://groups.google.com/forum/?fromgroups#!topic/perl-cache-discuss/M_wXFNL5MdM[1-25]
if ( $want_to_delete_url ) {
$mech->cache->remove( $url );
}
$mech->get( $url );
http://www.perlmonks.org/?node_id=564208
my $url = "http://www.rulez.sk/headers.php";
my $req = GET $url, 'Accept-Encoding' => 'identity';
$cache->remove($req->as_string) or print "cannot remove $!";
答案 0 :(得分:3)
有助于阅读您正在使用的软件的文档。 CHI使用get_keys
method列出所有缓存键,因此您可以简单地迭代它们,直到找到所需的缓存键。
use 5.010;
use CHI qw();
use HTTP::Request qw();
use WWW::Mechanize::Cached qw();
my $cache = CHI->new(
driver => 'CacheCache',
cc_class => 'Cache::FileCache',
cc_options => { cache_root => '/tmp' },
);
my $uri = 'http://www.iana.org/domains/example/';
my $mech = WWW::Mechanize::Cached->new(cache => $cache);
$mech->get($uri);
for my $key ($cache->get_keys) {
my $r = HTTP::Request->parse($key);
say $r->uri;
$cache->remove($key) if $r->uri eq $uri;
};