Apr 09, 2011
IO::Uncompress::AnyUncompress でファイルを展開してみる
ぽちたてで gzip、bzip2、zip といった形式に圧縮されたテキストファイルを直接読み込めるようにしたくて Perl でそうした圧縮ファイルを展開する方法を調べてみると、gzip、bzip2、zip、その他をまとめて扱ってくれる IO::Uncompress::AnyUncompress という、そのものズバリな名前の便利そうなモジュールを発見。早速試しに gzip、bzip2、zipファイルを展開するコードを書いてみました。
#!/usr/bin/perl
use strict;
use warnings;
use IO::Uncompress::AnyUncompress qw/$AnyUncompressError/;
my $file = $ARGV[0];
if ($file =~ /.+\.txt$/) {
open my $fh, '<', $file
or die "Couldn't open $file for reading: $!\n";
my $content .= join '', <$fh>;
close $fh;
print $content;
}
elsif ($file =~ /.+\.zip$|.+\.gz$|.+\.bz2$/) {
my $z = IO::Uncompress::AnyUncompress->new($file)
or die "anyuncompress failed: $AnyUncompressError\n";
my $content .= join '', <$z>;
close $z;
print $content;
}
else {
die "Illegal file name: $file\n";
}
exit;
ファイルを引き数に取って、そのファイルがテキストファイルの場合はそのままで、対応している圧縮ファイルの場合は展開してから、文字列の入った $content
を print
で標準出力へ流しています。改めてテキストファイルが必要なら > で新しいファイルへリダイレクトしてあげるといいかも?
ファイル判別にファイル名の拡張子を使ってるので、中身が何だか分からないアヤシゲなファイルには危なくて使えないけど、ぽちたての用途なら充分使えそうです。
Posted at 15:58
in perl
| Comments/Trackbacks ()
Comments/Trackbacks
http://pochi.usamimi.info/blog/perl/anyuncompress.
writeback message: