"Michael R. Wolf" wrote: > > [EMAIL PROTECTED] (John W. Krahn) writes: > > > > Are you sure there are only three? :-) > > > > $ perl -le' > > print qq(undef is FALSE) unless undef; > > print qq("" is FALSE) unless ""; > > print qq("0" is FALSE) unless "0"; > > print qq(0 is FALSE) unless 0; > > print qq(0e0 is FALSE) unless 0e0; > > ' > > undef is FALSE > > "" is FALSE > > "0" is FALSE > > 0 is FALSE > > 0e0 is FALSE > > You caught me; very nice counterproof. You were obvoiusly > right about the "0" (see "Camel citation below), but I'd > suggest that 0 and 0e0 are the same - they're both scalar > numeric zero. I could be convinced otherwise if there's a > reason to make the distinction between these: > > scalar numeric float zero (0e0) > scalar numeric int zero (0) > > I originally suggested 3 false values, you counterproposed > 5, and now I'm counter-counterproposing 4. > > I've modified the test (with answers) as below. > > test> Any value that is not false is true. What values indicate false? > test> > test> string -- _""____ _"0"___ > test> > test> numeric -- _0_____ > test> > test> other -- _undef_ > test> > > When scoring it, I'll accept 0e0 instead of or in addition > to 0, but I'm not likely to get it since I won't mention the > distinction in class. There isn't really an user-level > distinction between int and float like there is a > distinction between string/numeric and scalar/array.
The reason I threw in the 0e0 is that although 0 stringified is also false this is not true for "0e0" which is true. $ perl -le' print q("0e0" is ), "0e0" ? "TRUE" : "FALSE"; print q( 0e0 is ), 0e0 ? "TRUE" : "FALSE"; ' "0e0" is TRUE 0e0 is FALSE John -- use Perl; program fulfillment -- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]