Получение возвращаемого значения команды, выполненной с помощью обратных кавычек в Perl - PullRequest
19 голосов
/ 19 октября 2011

Я могу сделать следующее в bash:

output=`command`
retcode=$?

Есть ли способ сделать то же самое в Perl?Как то так:

$output=`command`
$retcode=???

Ответы [ 2 ]

23 голосов
/ 19 октября 2011

Вы можете прочитать переменную $? (как в оболочке). От man perlvar

 $?      The status returned by the last pipe close, backtick ("``") command, successful call to wait() or waitpid(), or from the
               system() operator.  This is just the 16-bit status word returned by the traditional Unix wait() system call (or else is made up
               to look like it).  Thus, the exit value of the subprocess is really ("$? >> 8"), and "$? & 127" gives which signal, if any, the
               process died from, and "$? & 128" reports whether there was a core dump.  (Mnemonic: similar to sh and ksh.)

               Additionally, if the "h_errno" variable is supported in C, its value is returned via $? if any "gethost*()" function fails.

               If you have installed a signal handler for "SIGCHLD", the value of $? will usually be wrong outside that handler.

               Inside an "END" subroutine $? contains the value that is going to be given to "exit()".  You can modify $? in an "END"
               subroutine to change the exit status of your program.  For example:

                   END {
                       $? = 1 if $? == 255;  # die would make it 255
                   }

               Under VMS, the pragma "use vmsish 'status'" makes $? reflect the actual VMS exit status, instead of the default emulation of
               POSIX status; see "$?" in perlvms for details.

               Also see "Error Indicators".
1 голос
/ 21 августа 2015

А после Perl 5.10 у вас также есть ${^CHILD_ERROR_NATIVE}.

С http://perldoc.perl.org/perl5100delta.html#New-internal-variables:

${^CHILD_ERROR_NATIVE}

Эта переменнаяисходное состояние, возвращаемое последним закрытием канала, командой backtick, успешным вызовом wait () или waitpid () или оператором system ().Подробности смотрите в perlvar.

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