in reply to Why is this evaluating to true?

use strict; use warnings; if('test' eq 0){ print "in if" } else { print "in else" } if(!'test') { print "again in if" } else { print "again in else" } __END__ prints: in else again in else

All strings in perl are evaluated to true (even the string 'false'!) except this: '0'

if('0' eq 0) { print "in if" } else { print "in else" } __END__ prints: in if

the problem here is that you are trying to mix a boolean and a number, this is a logical operation, the same as if(TRUE is FALSE)... not numerical as in if (2*4 == 8), you are trying to say: if (TRUE == 8)

If you really want to specify that 'this_chain' == zero (the number) and force a numeric comparison you need to comment and deactivate use warnings, (but this is nonsense, use a variable name instead)

Updated: if ($var == 0) is not a problem for warnings, of course