尝试理解一些编写为:
的代码if ($txn->result() == 1) { # line 1014
当返回值是1,1001等数字时没问题。当返回值为0时,我得到臭名昭着(臭名昭着)“在字符串eq中使用未初始化值”警告。
在这种情况下,您如何具体测试LHS作为数字等于RHS的数字?
无论我如何尝试,这种情况下的结果都会返回''我认为它是假的。
答案 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,则还具有避免未定义警告的附加优势。