in reply to variable set to 0 ? 0 : 1
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:
or maybe betterreturn $status == 0 ? (wantarray ? () : undef) : 1;
return 1 if $status == 0; return;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# a return by itself implicitly returns an empty list
return 1 if $status; return;
Updated: thanks ++Flexx. Moved one code example, added a few small but important bits.
Makeshifts last the longest.
|
---|
Replies are listed 'Best First'. | |
---|---|
Re: Re: variable set to 0 ? 0 : 1
by hossman (Prior) on Sep 06, 2002 at 07:51 UTC | |
by blakem (Monsignor) on Sep 06, 2002 at 08:31 UTC | |
Re(2): variable set to 0 ? 0 : 1
by Arien (Pilgrim) on Sep 06, 2002 at 07:42 UTC | |
by Aristotle (Chancellor) on Sep 06, 2002 at 13:46 UTC | |
Re: Re: variable set to 0 ? 0 : 1
by hossman (Prior) on Sep 06, 2002 at 08:01 UTC | |
Re^2: variable set to 0 ? 0 : 1 (return by itself returns undef in scalar context)
by Flexx (Pilgrim) on Sep 06, 2002 at 12:51 UTC | |
by Aristotle (Chancellor) on Sep 06, 2002 at 13:38 UTC | |
Re^2: variable set to 0 ? 0 : 1
by diotalevi (Canon) on Jan 23, 2007 at 07:28 UTC |