perl でzip 展開

  • IO::Uncompress::Unzip
  • Archive::Zip


さらっとperldoc 読んだ感じでは、IO::Uncompress::Unzip のほうが使いやすいかなーと思った。メソッド名が短くて書きやすいことと、複数のファイルを圧縮しているとき(multiple compressed files) に、特定のファイルだけを展開したい場合などで。(これはArchive::Zip でもできるかも)。
まぁ展開できればどっちでもいいんだけど。

use IO::Uncompress::Unzip qw(unzip $UnzipError);

## functional interface
#### print stdout
my $status = unzip 'hoge.zip' => '-', { MultiStream => 1, NAME => 'foo.log' };

## OO interface
my $z = IO::Uncompress::Unzip->new(
  'hoge.zip',
  MultiStream => 1,
  NAME => 'foo.log',
);

while (my $line = <$z>) {
  chomp $line;
  print "$line\n";
}