http://www.perlmonks.org?node_id=766182


in reply to How to get the exit status and the output of the command launched in perl

backquotes operator can only get the output of the command
backticks also can get exit status the same way the system does. You can read it from $?
  • Comment on Re: How to get the exit status and the output of the command launched in perl
  • Download Code

Replies are listed 'Best First'.
Re^2: How to get the exit status and the output of the command launched in perl
by sunshine_august (Scribe) on May 26, 2009 at 10:31 UTC
    yes, but the $? in perl is different from the $? in bash.
    I test the curl command in bash and in perl:
    [larry@august-dev perl]$ curl --max-time 3 http://someweb.org 2>&1 curl: (6) name lookup timed out [larry@august-dev perl]$ echo $? 6
    and if I put it in perl like:
    #!/usr/bin/perl use strict; use warnings; my $result = `curl --max-time 3 http://someweb.org 2>&1`; print "exit status: $?\n"; print "result:\n", $result, "\n";
    then I got:
    [larry@august-dev perl]$ ./foo.pl exit status: 1536 result: curl: (6) name lookup timed out
    How does perl translate the bash $? 6 to its own $? 1536 ?
    Is there a convenient way to translate it back? </code>
      Is there a convenient way to translate it back?

      In short (but not entirely correct), it's 1536 >> 8, i.e. shift right the return value by 8 bits, or divide by 256. For the details, see system.