perl で外部コマンドを実行し、いくつかの行をフィルタリングしたいと思います。stderr に送られる行をフィルタリングする方法がわかりません。現在、次のコードがあります。
#!/usr/bin/env perl
use File::Spec;
#open STDERR, '>', File::Spec->devnull() or die "could not open STDERR: $!\n";
open(FILEHANDLE, '-|', 'Mycmd') or die "Cannot fork: $!\n";
open(STDERR, ">&FILEHANDLE");
while(defined(my $line = <FILEHANDLE>)) {
chomp($line);
if( $line =~ m/text1/ or
$line =~ m/text2/ or
$line =~ m/text3/
) {
# do nothing
}
else {
print "$line\n";
}
}
close FILEHANDLE or die "child error: $!\n";
この線
open(STDERR, ">&FILEHANDLE");
stderr をリダイレクトして stdout で処理できるようにしようとしていますが、機能しません。
解決策は、Windowsで機能する必要があります。