-1

私は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 $!";
4

1 に答える 1

3

使用しているソフトウェアのドキュメントを読むと役立ちます。get_keysCHI はすべてのキャッシュ キーを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;
};
于 2012-08-14T09:32:23.240 に答える