in reply to Handling weird return values with or die

As you are saying, normally executing programs return 0 to signify a normal exit. The Perl expression EXPR1 or EXPR2 evaluates EXPR2 only if EXPR1 is false. 0 is false.... So, what you see happening is exactly what should be happening.

I guess you are using or die on system *calls* (like open or unlink), but system is not a system call.

-- Abigail