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



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 $_;
}