как зафиксировать статус выхода захвата, вызывающего другой скрипт perl в скрипте perl, и если он терпит неудачу, он должен умереть

Я только начал использовать Perl 5.26 на secure-CRT и написал Perl-скрипт, который перехватывает вызовы нескольких Perl-скриптов.

 my @secondCommand = capture("perl clientquery.pl -r $cid -l test.log -is $sqlFile");

Мне было интересно, как я могу зафиксировать статус выхода каждого вызова захвата, и если это не удастся, как я могу заставить исходный скрипт умереть.


person Mohammed Dirir    schedule 17.10.2018    source источник
comment
Откуда взялась функция capture()? Может быть, он уже где-то возвращает статус выхода? Или, может быть, он устанавливает $? ?   -  person Corion    schedule 17.10.2018
comment
что именно ты имеешь в виду? Вы можете быть более конкретным?   -  person Mohammed Dirir    schedule 17.10.2018
comment
используйте IPC::System::Simple qw(системный захват);   -  person Mohammed Dirir    schedule 17.10.2018
comment
захват из IPC::System::Simple уже по умолчанию умрет, если команда завершится ошибкой или вернет ненулевой статус выхода (это простая часть). Вы можете указать, что он не умирает при определенных кодах выхода (или любом коде выхода), см. документы.   -  person Grinnz    schedule 17.10.2018


Ответы (1)


IPC::System::Simple предоставляет $EXITVAL, который фиксирует код выхода команд, запускаемых через capture и другие функции.

Выходное значение любой команды, выполняемой IPC::System::Simple, всегда можно получить из переменной $IPC::System::Simple::EXITVAL:

Это особенно полезно при проверке результатов захвата, который возвращает захваченный текст из команды.

use IPC::System::Simple qw(capture $EXITVAL EXIT_ANY);

my @enemies_defeated = capture(EXIT_ANY, "defeat_evil", "/dev/mordor");

print "Program exited with value $EXITVAL\n";

$EXITVAL будет установлено в -1, если команда не завершилась нормально (например, была завершена сигналом) или не запустилась. В этой ситуации также будет выброшено исключение.

person simbabque    schedule 17.10.2018
comment
Лучший парень, спасибо! - person Mohammed Dirir; 17.10.2018