regarding the return code from system, here's a perldoc -f system snippet:
in reply to Best method to capture return code from system calls?
The return value is the exit status of the program
as returned by the "wait" call. To get the actual
exit value divide by 256.
-- snip --
You can check all the failure possibilities by
inspecting "$?" like this:
$exit_value = $? >> 8;
$signal_num = $? & 127;
$dumped_core = $? & 128;
See also the $? section in perldoc perlvar. In brief, it is The status returned by the last pipe close, backtick ("``") command, successful call to wait() or
waitpid(), or from the system() operator.