Did you declare 'false' and 'true' as constants?
use constant false=>0;
use constant true=>1;
if (false) { print "I do always get printed...\n" }
if (false==true) { print "..and even do I" }
Otherwise the barewords 'false' and 'true' are treated as strings. Now if you rewrite false==true as false eq true, the second print will never be executed.
| [reply] [d/l] [select] |
Thank you for your reply. Yet another reason why one should always use 'perl -w'
| [reply] |
Perl has never had the values "true" and "false" assigned to literals. You could do use constant true => 1; use constant false => 0; | [reply] [d/l] |
I have to warn you, that comparing to true or false is a very unperlish thing to do. 1 is considered as true, yes, but so is 2, 3.14, and "aardvark". In short: don't ever do
if($flag==true) { ...
because you'll get a false response for any case where $flag is a true value, but not the same as the value for your constant true.
In Perl, you should just be using
if($flag) { ...
if you want to test if it's true, and any of
if(!$flag) { ...
if(not $flag) { ...
unless($flag) { ...
to test for false.
p.s. An additional warning: All of undef, 0, "" and "0" are considered false in Perl. Perhaps that's too forgiving for you, and you explicitely want to distinguish between them. Use of defined, and of
$value eq ""
are typical idioms to deal with that. And no, you're not supposed to make a distinction between 0 and "0".
Thank you for your time. | [reply] [d/l] [select] |