31 Stimmen

Den Rückgabewert eines mit Backticks ausgeführten Befehls in Perl ermitteln

Ich kann folgendes in der Bash tun:

output=`command`
retcode=$?

Gibt es eine Möglichkeit, dasselbe in Perl zu tun? Etwas wie dies:

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

29voto

Matteo Punkte 14040

Sie können die $? Variable (wie in der Shell). Von 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".

3voto

mivk Punkte 11443

Und seit Perl 5.10 haben Sie auch ${^CHILD_ERROR_NATIVE} .

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

${^CHILD_ERROR_NATIVE}

Diese Variable gibt den nativen Status an, der vom letzten Pipe Close zurückgegeben wurde, Backtick-Befehl, einem erfolgreichen Aufruf von wait() oder waitpid() oder von der system()-Operator. Siehe perlvar für Details.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X