无法将字符串("0")用作哈希引用

3

我正在尝试这段代码,在运行时遇到了错误。

   $cfg->{'validRules'} = "true"
...


if ($cfg->{'validRules'} eq "true") { <== error is pointing to this
}

错误信息是

错误:在使用“strict refs”时无法将字符串(“0”)用作HASH引用,位置在

我完全不知道怎么办。我尝试了更改但仍然相同。如果能得到帮助,我将不胜感激。


在赋值和访问之间会发生什么?$cfg 是否在途中被传递到某个 sub 中了? - mu is too short
Data::Dumper 是你的好朋友。 - user554546
@mu 是的,$cfg已被修改,实际上如果满足某些条件,则添加了$cfg->{'validRules'}。这发生在另一个子程序中,并且$cfg被返回给调用者。现在调用者调用下一个子程序,其中传递了$cfg,在该子程序中,我看到了报告的问题。 - Sreeram Ravinoothala
1个回答

4
你做了等同于的事情。
$cfg = 0;

在某个时候,这显然会使

$cfg->{'validRules'}

失败。查找将零赋值给$cfg的位置并进行修复。


如果(exists($cfg->{'validRules'}) && $cfg->{'validRules'} eq "true"){ <== 错误指向此处 } 我仍然看到相同的错误。 - Sreeram Ravinoothala
@SreeramRavinoothala exists 仍然尝试使用 $cfg 变量作为引用。 - TLP
1
@SreeramRavinoothala:你是否在出现错误的那一点处转储$cfg?你应该将它放在失败的if语句之前。 - Borodin
1
if语句没问题。正如我在答案中所说,问题是您将零放入了$cfg中。 - ikegami
2
是的,另一个子程序没有返回包括$cfg在内的所有值。因此调用者得到了空值。感谢您推动我更深入地查看代码。 - Sreeram Ravinoothala
显示剩余11条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接