File::Extract (Now With Filters)

| コメント(0) | トラックバック(0)



今日一瞬時間が空いた時に宮川さんと会話した内容から作ったですよ:



use File::Extract;
use File::Extract::Filter::Exec;

my $extract = File::Extract->new(
filters => {
'text/plain' => [
File::Extract::Filter::Exec->new(cmd => "perl -pe 's/^/\$. /'")
]
}
);
$extract->extract($file);


ってな感じでフィルターするコマンドを実行してからファイルの内容を抽出できる。上記の例の場合はプレーンテキストファイルの行頭に行番号をいれてから抽出する。


初めてIPC::Open2使ったけど、なかなか便利やねぇ。ちなみに perl -pe とかでIPC::Open2を使う場合ファイルハンドルのクローズタイミングがポイントですよ(一回ひっかかってデバッグ時間2時間を費やしてしまった・・・)



my ($read, $write);
open2($read, $write, "perl -pe 's/^/\$. /'");

while (<$source>) {
print $write, $_;
}

close($write); # ここで閉じないと、perl が終了しない

while (<$read>) {
print $_;
}


Author

Daisuke Maki (a.k.a lestrrat): Perl hacker, Director of Japan Perl Association, YAPC::Asia Tokyo Organizer (2009-2012), Fluent in Japanese, English. Ex-Brazilian (sorta)

#perl #c #ruby #java #mysql #english #japanese #opensource #stf #cooking #scotch #cigar


このエントリーをはてなブックマ
ークに追加

翔泳社よりモダンPerl入門(2010)を出版させていただいております。できれば内容をアップデートしたいので是非皆様・・・現在の在庫処理にお力をお貸しください!><

月別アーカイブ