in reply to Re: Re: Re: A C-like brain in a Perl-like world
in thread A C-like brain in a Perl-like world

Perl seems to be assuming that "0.0" is a string, which is fair enough, if that is by design, which I assume it is. "return 0.0" would from a subroutine would evaluate as false.

Perl will convert "0.0" to a number as soon as you do anything mathematical on it. Such as:
perl -e '$foo = "0.0" + 0; print $foo ? "True" : "False"'
Which behaves as you'd expect. This reminds me of (even though it's completely different):
perl -e 'print "I cannot add" unless 19.08 + 2.01 == 21.09'
If I remember correctly this comes from an early TPJ article.

Update: removed ' from print statement - thanks tilly - That's me in hybrid Win32 cmd.exe, Linux shell quoting mode :)

Simon Flack ($code or die)
$,=reverse'"ro_';s,$,\$,;s,$,lc ref sub{},e;$,
=~y'_"' ';eval"die";print $_,lc substr$@,0,3;

Replies are listed 'Best First'.
Re (tilly) 5: A C-like brain in a Perl-like world
by tilly (Archbishop) on Sep 27, 2001 at 07:24 UTC
    You need to do one of the following to make that work:
    perl -e 'print "I cannot add" unless 19.08 + 2.01 == 21.09' perl -e 'print "I can'\''t add" unless 19.08 + 2.01 == 21.09'
    BTW as Re: Strange (rounding?) problem points out, Perl often handles floats better if you use eq instead of == for testing equality...