CacheとCache::Cacheというのがあるのね。
CacheとCache::Cacheというのがあるのね。モジュールの名前も似ているし、ややこしい。
URI::Fetchを使おうと思って、Cache::Cacheをいれて、URI::FetchのSYNOPSISのようなコードを書いて実行。
my $cache = Cache::File->new( cache_root => '/tmp/cache' ); my $res = URI::Fetch->fetch('http://example.com/atom.xml', { Cache => $cache })
すると、Cache::Fileがないと言われる。
あれれと思ってよく読むと、Cache::Cacheではなくて、Cacheというモジュールに含まれるCache::Fileだと判明。
Cache::Cacheに入っているのは、Cache::FileCache。
ただ、URI::Fetchのソースも見てみると、getとsetを利用しているだけ。Cache::Cacheでもかまわなそうと思い
my $cache = Cache::FileCache->new({cache_root => '/tmp/cache'}); my $res = URI::Fetch->fetch('http://example.com/atom.xml', { Cache => $cache })
としてみた。
結果、普通に動いた。
CacheとCache::Cacheの違いはCacheモジュールの中に書いてある。
The Cache modules are a total redesign and reimplementation of Cache::Cache and thus not directly compatible. It would be, however, quite possible to write a wrapper module that provides an identical interface to Cache::Cache.
The semantics of use are very similar to Cache::Cache, with the following exceptions:
The get/set methods DO NOT serialize complex data types. Use freeze/thaw instead (but read the notes in Cache::Entry).
シンプルに使う分にはほぼ同じ。
複雑なデータの取り回しはすこし違うというわけですな。
ところで、URI::Fetchのキャッシュなのだが、getとsetメソッドだけ定義すれば良い訳で、
データベースを利用したりgetやsetの間にごにょごにょと何かを挟み込むことができそう。
URI::Fetchは中を見ると非常にシンプルなんだけど、非常に便利だなぁ。