http://qs321.pair.com?node_id=641660


in reply to Re: System call + signals = bad return code?
in thread System call + signals = bad return code?

So, working on my theory that $? and $! are being trashed because of the call to the signal handler, I localised the variables $? and $! which has made a positive difference. Here is the code.
$SIG{ALRM} = sub { local $? = 0; local $! = 0; print( "Alarm triggered in $$\n" ); unlink('/doesnt/exist'); # this will definitely fail }; alarm(2); my $rt = system("sleep 4"); print "system returned $rt, \$? is $?\n";

And the output is -

Alarm triggered in 26346 system returned 0, $? is 0

Give it a try in your code. Let me know how is goes.