Perl スクリプトから SVN タグの存在を確認しようとしています。そこで、 を呼び出しsvn info $url
、終了コードを読み取り、標準出力と標準エラー ストリームを抑制します。しかし、私はこれをエレガントに行うのに苦労しています (タグについて SVN に尋ねるより良い方法があるかもしれませんが、それはここでは重要ではありません):
my $output = `svn info $url/tags/$tag`;
これは、出力を に入れながら出力を抑制します$output
。終了コードが失われます。
my $output = `svn info $url/tags/$tag 2>&1`;
これにより、STDERR と STDOUT の両方が抑制され、両方が に入れられ$output
ます。終了コードが再び失われます。
my $exitcode = system("svn", "info", "$url/tags/$tag");
これにより終了コードがキャッチされますが、実際の出力とエラー ストリームはユーザーに表示されます。
open( STDERR, q{>}, "/dev/null" );
open my $fh, q{>}, "/dev/null";
select($fh);
if (system("svn", "info", "$url/tags/$tag") != 0) {
select(STDOUT);
print ("Tag doesn't exist!");
do_something_with_exit();
}
select(STDOUT);
print "Exit code: $exitcode";
これにより、STDOUT と STDERR が強制終了され、終了コードがキャッチされますが、STDOUT を元の状態に戻すには覚えておく必要があるため、見苦しいものです。
それで、もっとエレガントな解決策はありますか?