Perl 如何从WWW::Mechanize::Cached中删除url?

Perl 如何从WWW::Mechanize::Cached中删除url?,perl,caching,www-mechanize,Perl,Caching,Www Mechanize,我与Cache::FileCache一起使用,有时我想从缓存中删除某些URL,但WWW::Mechanize::Cached没有这样的选项 我查看了源代码,可以看到缓存是使用以下行设置的: $self->cache->set( $req, freeze( $response ) ) if $should_cache; 因此,我尝试使用以下代码从缓存中删除项目: $cache->remove($mech->response->request) or warn "ca

我与Cache::FileCache一起使用,有时我想从缓存中删除某些URL,但WWW::Mechanize::Cached没有这样的选项

我查看了源代码,可以看到缓存是使用以下行设置的:

$self->cache->set( $req, freeze( $response ) ) if $should_cache;
因此,我尝试使用以下代码从缓存中删除项目:

$cache->remove($mech->response->request) or warn "cannot remove $!";

但我得到警告:“不能删除任何这样的文件或目录”

我也发现了以下想法,但似乎都不管用


阅读您正在使用的软件的文档很有帮助。CHI列出了所有带有的缓存键,所以您可以简单地对它们进行迭代,直到找到所需的缓存键

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

有一个简短、正确、自成一体的例子会很有用。有关基本原理,请参见。编写一个小程序,创建缓存,添加一个对象,尝试使用一个或多个方法删除它,或者使用您尝试过的方法删除它,并重现您的错误。这将使帮助您变得更容易。我想我可以,但这只是一个最小的www::mechanize::cached程序,上面尝试从缓存中删除。-1因为缺少明确显示问题的工作示例代码。您有责任将问题的质量提高到尽可能高的标准。-当我第一次不得不自己拼凑一些东西,而有些东西没有按预期工作时,我无法确定错误是否在我的额外代码中。更糟糕的是,那些额外的编码时间浪费了我回答更多问题的时间。更糟糕的是,浪费的时间会乘以每个试图回答问题的人。Cache::FileCache确实有get_keys()so+1
if ( $want_to_delete_url ) {
    $mech->cache->remove( $url );
}
$mech->get( $url );
my $url = "http://www.rulez.sk/headers.php";
my $req = GET $url, 'Accept-Encoding' => 'identity';
$cache->remove($req->as_string) or print "cannot remove $!";
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;
};