grepコマンドへのパイプを開き、結果を 1 行ずつ読んでいます。完了したら、パイプを閉じます。grepが何かを見つけた場合、 close()は正常に完了します。grepで何も見つから ない場合、close()は機能しません。
問題をデモするためのfooは次のとおりです。
#!/usr/bin/perl
use 5.010;
use strict;
use warnings;
my $search = shift // die "Usage: foo search_string";
open my $grep_h, "grep '$search' ./foo |"
or die "open grep failed: $!";
while (defined (my $line = <$grep_h>)) {
chomp $line;
say "\t: $line";
}
close $grep_h or warn "Error closing grep pipe: $!";
ここで、 fooを呼び出して「warn」を検索します。
~/private/perl$ ./foo warn
: use warnings;
: close $grep_h or warn "Error closing grep pipe: $!";
ここで、 fooを呼び出して「blarg」を検索します。
~/private/perl$ ./foo blarg
Error closing grep pipe: at ./foo line 16.
このエラーが発生するのはなぜですか?