in reply to system and $?

If you take another look at that page for ($?, $CHILD_ERROR), you will see that there are 2 other "if" clauses that follow the test for -1! This is a 16 bit value, not just the simple exit code. exit value of subprocess is high byte and low byte reports a signal. See page 661 of Programming Perl by Larry Wall. And oh, BTW decimal 256 is -1 in 8 bit lingo. Anyway this value is expected to be OS dependent.

Update: I tried this on my WinXP system and it doesn't even get as far as the print. I get text error message: 'no-such-program' is not recognized as an internal or external command, operable program or batch file. This is what the shell would give out.

Replies are listed 'Best First'.
Re^2: system and $?
by rovf (Priest) on Aug 26, 2009 at 12:26 UTC
    you will see that there are 2 other "if" clauses that follow the test for -1!
    Exactly. But in the other cases, the high byte is supposed to contain the exit code of the invoked program, and the low byte the child error. As you can see from my posting, only Cygwin reports a child error, while on the other examples, the child error is 0 too.

    I think, the anonymous posting at Re: system and $? gives a clue of what is happening for the ActiveState/Windows case: Contrary to the documentation, the command shell *is* invoked, and it seems that CMD.EXE on Windows 2000 reports a non-existing program just by setting ERRORLEVEL to 1.

    As for Solaris, I found that Perl 5.8.8 does it correctly, so returning zero is a bug in 5.8.7.

    -- 
    Ronald Fischer <ynnor@mm.st>