【发布时间】:2013-10-04 16:04:09
【问题描述】:
我有一些 Perl 代码正在做一些我无法弄清楚的奇怪事情。我在这段代码之前定义了两个变量:
$latestPatch = '000';
$test_setup{appl}{Rev0_OK} = 'F'; # a hash element
两者都定义为字符串。如果我打印出原始变量(用 ' 包裹它们),'int($latestPatch)' 是 '0' 和 '$test_setup{appl}{Rev0_OK}' 是 'F'。到目前为止,正如预期的那样。现在我运行以下命令:
$shouldInstall = int($latestPatch) == 0 &&
$test_setup{appl}{Rev0_OK} eq 'T';
$shouldInstall 以空值结束(预期为 false/0)! (打印'$shouldInstall' 给出'')。逐步调试语句(未显示)表明 int($latestPatch) == 0 工作正常,给出 1 (TRUE),但 $test_setup{appl}{Rev0_OK} eq 'T' 为 null ''(因此 $shouldInstall 为 '')。如果我将测试更改为$test_setup{appl}{Rev0_OK} eq 'F',则为 1 (TRUE)。如果我将测试更改为$test_setup{appl}{Rev0_OK} ne 'F',它再次为空。这里发生了什么?没有发出错误消息。我确实定义了布尔变量 TRUE 和 FALSE(如 int 1 和 0)。
aTdHvAaNnKcSe
【问题讨论】:
-
回复:“我确实定义了布尔变量 TRUE 和 FALSE(如 int 1 和 0)。”只是不要做
... == FALSE或... == TRUE! -
我没有比较我的 TRUE 和 FALSE 常量。只是
if ($shouldInstall) {...我只是在评论我碰巧有这些常量,以防它们对这里的情况有影响。或许我可以更清楚一点。 -
我知道你不在这里;我给出了一般性的建议。创建
TRUE和FALSE常量的人倾向于检查它们,当语言的定义与常量不同时,这没有意义,就像这里的情况一样。
标签: perl