File::Grep
サンプルのテキストファイル
a.txt
a b c x a
b.txt
a b
c.txt
b
fgrep
use File::Grep qw(fgrep); use Data::Dumper; @ret = fgrep {/a/} glob './*.txt'; print Dumper @ret;
$VAR1 = { 'count' => 2, 'matches' => { '4' => 'a ', '1' => 'a ' }, 'filename' => './a.txt' }; $VAR2 = { 'count' => 1, 'matches' => { '1' => 'a ' }, 'filename' => './b.txt' }; $VAR3 = { 'count' => 0, 'matches' => {}, 'filename' => './c.txt' };
fgrep()をスカラーで受けると($ret=fgrep {...} ...)、真偽値(0か1)が入る。
fgrep {($file,$pos,$line)=@_}
条件式の中でファイルの通し番号や行番号を取り出せる。
use File::Grep qw(fgrep); @ret = fgrep {($file,$pos,$line)=@_;print "$file,$pos,$line";} glob './*.txt';
0,1,a 0,2,b 0,3,c x 0,4,a 1,1,a 1,2,b
$fileはgrepしたファイルの、0から始まる通し番号をあらわす。