Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Getting the return value of a command executed using backticks in Perl

I can do the following in bash:

output=`command` retcode=$? 

Is there any way to do the same in Perl? Something like this:

$output=`command` $retcode=??? 
like image 219
petersohn Avatar asked Oct 19 '11 09:10

petersohn


People also ask

What does Backtick do in Perl?

like system executes a command and your perl script is continued after the command has finished. In contrary to system the return value is STDOUT of the command.

What is QX in Perl?

PERL QX FUNCTION. Description. This function is a alternative to using back-quotes to execute system commands. For example, qx ls − l will execute the UNIX ls command using the -l command-line option. You can actually use any set of delimiters, not just the parentheses.


1 Answers

You can read the $? variable (as in the shell). From 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". 
like image 88
Matteo Avatar answered Sep 30 '22 16:09

Matteo