2012-08-14 77 views
-1

我正在使用WWW::Mechanize::Cached和Cache :: FileCache,我想从缓存中删除某些URL,但是WWW :: Mechanize :: Cached没有这样的选项。如何从WWW :: Mechanize :: Cached中删除一个url?

我已经通过源代码看去,可以看到缓存使用此行来设置:

$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

有一个简短的,正确的,独立的例子会很有用。有关基本原理,请参阅http://sscce.org/。编写一个创建缓存的小程序,添加一个对象,尝试使用一个或多个方法或您尝试过的方法删除它,并重现您的错误。这会让你更容易帮助你。 – 2012-08-14 02:24:00

+0

我想我可以,但它只是一个最小的www :: mechanize :: cached程序,上面的尝试从它的缓存中删除。 – 2012-08-14 06:02:44

+1

-1由于缺乏清晰显示问题的工作示例代码。 *您的责任是将问题的质量提高到最高标准。 - 当我第一次需要自己拼凑一些东西,并且某些东西不能按预期工作时,我无法确定这个错误是否在我的额外代码中。更糟的是,那些额外编码的时间浪费了我的时间,我可以花费回答更多问题。更糟糕的是,每个试图回答问题的人都浪费了时间。 – daxim 2012-08-14 09:31:04

回答

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; 
}; 
+0

Cache :: FileCache确实有get_keys(),所以+1 – 2012-08-15 00:05:26