in reply to Returned Code

Check out IPC::System::Simple. It's brand new, but it simplifies stuff like this (and much more).

If you check the system page, you'll see that you (probably) need to use the $?...

if ($? == -1) { print "failed to execute: $!\n"; } elsif ($? & 127) { printf "child died with signal %d, %s coredump\n", ($? & 127), ($? & 128) ? 'with' : 'without'; } else { printf "child exited with value %d\n", $? >> 8; }

... I'm no expert on the topic, and you apparently need to be one, but I think you'll looking for $? >> 8.

UPDATE: I definitely did think the retval from system() was the same as $?, but the example in the docs showed $?, so that's what I quoted. Really, I was trying to plug IPC::System::Simple and that was my main thesis. I'd like to see that module get really popular. It's neat. If I recall correctly, he (the ISS author) says you do need to check $? for some reason. Maybe I read it on perlbuzz. Maybe I made it up.

-Paul

Replies are listed 'Best First'.
Re^2: Returned Code
by ikegami (Patriarch) on Jun 15, 2008 at 13:43 UTC

    If you check the system page, you'll see that you (probably) need to use the $?...

    $? is set to the return value of system are the same thing. I don't see the point of using a global variable when not needed.

    I think you'll looking for $? >> 8.

    Yes, or $retVal >> 8.

    I don't know why he's getting 256 (Error code 1) instead of 768 (Error code 3), but that's not a Perl issue.

      I don't see the point of using a global variable when not needed.

      Later in the day, I began to wonder. If it's the same as the return value from system, when is it ever needed?

      -Paul

Re^2: Returned Code
by Anonymous Monk on Jun 15, 2008 at 13:42 UTC
    [nobody@nowhere]$ cat t.cpp #include <iostream> using namespace std; int main() { cout << "C++ retVal: 3" << endl; return 3; } [nobody@nowhere]$ cat t.pl #!/usr/bin/perl system("./a.out"); printf "Got retval: %d\n", $?>>8; [nobody@nowhere]$ ./t.pl C++ retVal: 3 Got retval: 3 [nobody@nowhere]$