理解数字比较中的0返回

时间:2015-03-06 19:24:22

标签: perl

尝试理解一些编写为:

的代码
if ($txn->result() == 1) {   # line 1014

当返回值是1,1001等数字时没问题。当返回值为0时,我得到臭名昭着(臭名昭着)“在字符串eq中使用未初始化值”警告。

在这种情况下,您如何具体测试LHS作为数字等于RHS的数字?

无论我如何尝试,这种情况下的结果都会返回''我认为它是假的。

1 个答案:

答案 0 :(得分:3)

您报告的消息并非来自您发布的代码。该邮件来自eq undef,而不是来自== 0

$ perl -we'if (123 == 0) { }'

$ perl -we'if (123 == undef) { }'
Use of uninitialized value in numeric eq (==) at -e line 1.

$ perl -we'if (123 eq undef) { }'
Use of uninitialized value in string eq at -e line 1.

您可以使用defined功能检查值是否未定义("未初始化")。那就是说,我打赌这里不需要它。如果->result成功时返回true而错误时返回false,则应该检查它。

if ($txn->result()) {

除了更简单之外,如果将undef用于false,则还具有避免未定义警告的附加优势。