program perl command return-code

program - Obteniendo el valor de retorno de un comando ejecutado usando backticks en Perl



perl execute program (2)

Puedes leer el $? variable (como en la cáscara). Del 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".

Puedo hacer lo siguiente en bash:

output=`command` retcode=$?

¿Hay alguna manera de hacer lo mismo en Perl? Algo como esto:

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


Y desde Perl 5.10, también tienes ${^CHILD_ERROR_NATIVE} .

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

${^CHILD_ERROR_NATIVE}

Esta variable proporciona el estado nativo devuelto por el último cierre de canalización, comando de comilla invertida, llamada exitosa a esperar () o waitpid (), o del operador system (). Ver perlvar para más detalles.