ginju has asked for the wisdom of the Perl Monks concerning the following question:

I have written a program to compile some files recurssively. The program dies if there is a problem in compiling a particular file. Now it so happens that the customer of this script want the compiling to continue even if a file cannot be compild. In the sense that, the script needs to print out an ERROR message that the particular file was not compiled, and that the compiling has been resumed for the remaining files. In my discussions witha colleague, I figured that if the exit code is not zero the I can use it to print out the error message and resume the compiling. The point being now I will remove the "die" statement. Here's my question. How can I find out what the exit code was for the particular command? In the sense that if the command failed where would the exit number be stored? and what would that exit number be? Please see the sample code below: Can I say this? .... system(some command here to compile the files) if ($? != 0 || $status != 0) { some print statements... } .... I am using $? since it is the variable which has the exit value. And $status is when using a c-shell. Please advise if this is correct? Also I am a novice in perl programming, and this could as well be a blunder! ;-) Thanx for the help

Replies are listed 'Best First'.
Re: exit status
by chipmunk (Parson) on Apr 23, 2001 at 02:53 UTC
    $? is the variable that holds the exit status from external commands in Perl. If you just want to know whether the command succeeded, you could do something like this:
    system('whatever'); if ($?) { warn "whatever failed\n"; }
    If you want to know why the command exited with an error, you could examine the value of $? like this:
    system('whatever'); if ($?) { my $exit_value = $? >> 8; my $signal_num = $? & 127; my $dumped_core = $? & 128; print "whatever exited with status $exit_value"; print " from signal $signal_num" if $signal_num; print " and dumped core" if $dumped_core; print "\n"; }
    (See perlvar and system for more about $?)