Have a look at the documentation (Update: you'll also find some example code there how to inspect system for errors):
Return value of -1 indicates a failure to start the program or an error of the wait(2) system call (inspect $! for the reason).
And turn on warnings:
$ perl -wMstrict -le 'print system("exit 3");print "<$!>"' Can't exec "exit": No such file or directory at -e line 1. -1 <No such file or directory>
exit is a shell builtin, not an actual system command.
$ which exit $ perl -wMstrict -le 'print system(q{/bin/bash -c "exit 3"}); print "<$!>\n",$?>>8' 768 <> 3
And the AM post explains why the shell doesn't get called in my first example above:
$ perl -wMstrict -le 'system("pstree -A $$ ")==0 or die;' perl---pstree $ perl -wMstrict -le 'system("pstree -A $$;")==0 or die;' perl---sh---pstree
By the way, I can recommend IPC::System::Simple because of its better error handling, and I would also recommend avoiding the shell, if possible - I wrote about the issues with it here, and fellow monk afoken wrote about The problem of "the" default shell.
In reply to Re: Why is this exit code -1?
by haukex
in thread Why is this exit code -1?
by hepcat72
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |