在使用"严格参考"时,不能使用字符串("1")作为HASH参考

Håk*_*and 5 perl

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

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);
Run Code Online (Sandbox Code Playgroud)

这给出了:

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

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

Сух*_*й27 9

$h->{a}{b}暗示值为$h->{a}hashref,并且您想要检查它的密钥b是否存在.

由于$h->{a}是简单的标量(1),它不能用作hashref(use strict防止它),因此不能用作消息Can't use string (“1”) as a HASH ref