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;
| [reply] [d/l] [select] |
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... | [reply] [d/l] |