On Mon, Oct 15, 2007 at 01:27:26PM -0700, Michael Barto wrote:

> As both Java and Javascript both have a 'true' and 'false' or Boolean 
> data type, is there any interest in evolution of Perl to have a true 
> Boolean. Or what is the preferred method to do this in Perl.

The place to discuss this is the perl5-porters mailing list, not an
obscure platform-specific mailing list.

And the answer is no.  Because we already have a real Boolean.  We have
boolean *context*.  An operator like ?: forces its first operand to be
evaluated in boolean context:

    $value ? 'true' : 'false'

That first operand can, of course, be a complex expression, the end
result of which is evaluated in boolean context:

    cheezburger->{$cutecat}->() ? print "LOL!" : print "OH NOES!"

We also don't have int or float or a numeric type (the internals do, but
Perl the language doesn't) - we have numeric context.  Consider this:

    $ perl -e 'print "foo\n" if "2abc" == "2def"'

The == operator forces both its operands to be evaulated in numeric
context before comparing them.  As numbers, 2abc and 2def are both just
plain ol' 2, so the == returns true and we print.  If we change it to
this:

    $ perl -e 'print "foo\n" if "2abc" eq "2def"'

then the eq operator evaluates its operands in string context, where
2abc and 2def most definitely aren't the same.

> The "C" programmers want me to use "0"'s and "1"'s.

Seems reasonable.  Those do evaluate to false and true in perl.  Perl's
comparison operators return 1 for true and the empty string for false.
In numeric context that's the same as returning 1 and 0 because:

    '' == 0

-- 
David Cantrell | Hero of the Information Age

   When a man is tired of London, he is tired of life
      -- Samuel Johnson

Reply via email to