Я пытаюсь проверить наличие тега SVN из скрипта Perl. Поэтому я пытаюсь вызвать 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 обратно в исходное состояние.
Итак, есть ли более элегантное решение?