Perlでzipファイルを扱うには「Archive::Zip」というモジュールが便利なのですが、gzファイルも同じ感覚で扱おうとしたら以下のようなエラーが出ました。
format error: can't find EOCD signature
エラー処理をしないとさらに5行ぐらい表示されます。
どうもgzファイルには対応していないらしいです。
調べてみると「Compress::Zlib」というモジュールが使えるらしいので弄ってみました。
そもそもgzという圧縮形式はファイルをアーカイブする機能がないので、圧縮ファイルと解凍ファイルは1対1の関係です。サンプルではバッファの展開しか載っていないので、とりあえずその方法で使いました。
$dest = Compress::Zlib::memGunzip($buffer);
でめたしでめたし。
gzの解凍はArchive::Tarでできますよ。
Archive::Tarでも解凍できたんですか。
もしかするとtar.gz用なのかもしれませんね。
どちらが何用ってのがあるのかよく分かりませんが、とりあえずはCompress::Zlibを使っておきます。
内部的にはお互いがお互いを呼んでいるようですし。
cpanシェルではgzの解凍にCompress:Zlibを使っていますね。