使用严格引用模式时无法将字符串("1")用作哈希参考。

6

我正在尝试检查哈希键是否存在,例如:

use warnings;
use strict;
use feature qw(say);
use Data::Dump qw(dump);

my $h={a=>1,b=>2};

dump($h);

if (exists $h->{a}{b}) {
  say "Key exists.";
}
dump($h);

这将会得到:

{ a => 1, b => 2 }
Can't use string ("1") as a HASH ref while "strict refs" in use at ./p.pl line 12.

这个错误消息的原因是什么?

您IP地址为143.198.54.68,由于运营成本限制,当前对于免费用户的使用频率限制为每个IP每72小时10次对话,如需解除限制,请点击左下角设置图标按钮(手机用户先点击左上角菜单按钮)。 - erickb
1
赞赏您使用 Data::Dump。请注意,该模块默认导出 dd 方法,您可以使用它来打印到 STDOUT。dump 方法用于将数据结构序列化为变量。但是,在无效上下文中调用它时,它的行为与 dd 相同,这是我在观察您在此处的使用情况时不知道的。 - Miller
1个回答

11

$h->{a}{b} 表示 $h->{a} 的值是一个哈希引用,你想要检查它是否存在键 b

由于 $h->{a} 是简单标量 (1),无法用作哈希引用 (use strict 阻止了这样做),因此会显示消息 Can't use string (“1”) as a HASH ref


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