The explanation has already been given exhaustively, but I want to expand a bit on semantics here.
Returning zero in Perl is usually a bad meme. It is ok if you actually meant to return a numeric zero, but if you mean to return "false", the Perlish way is to return an empty list <update> in list context and undef otherwise. </update> This is because by returning 0 you return a single-element list, which evaluates to true in list context. The code would then look like this:
return $status == 0 ? (wantarray ? () : undef) : 1;
or maybe better
return 1 if $status == 0;
# a return by itself implicitly returns an empty list
Another pitfall may or may not be the == 0
. Is it meant to test falseness? If so, it is not precise. Perl understands the notion of an undefined value <update>
and also considers a defined but empty string as well as a literal string "0"
to be false </update>
, which are not
the same as zero, so this test is broken if it means to check falseness. In all likelihood, the programmer there should have written
return 1 if $status;
Updated: thanks ++Flexx. Moved one code example, added a few small but important bits.
Makeshifts last the longest.