我想用以下条件进行检查。
如果%ans
中未包含%test
的成员,请打印%ans
的值。
但为什么这不打印呢?
use Data::Dumper;
my %ans = ("foo" => 1);
my %test = ("bar" => 1);
foreach my $ansrule ( keys %{$ans} ) {
if ( !exists $test{$ansrule} ) {
print "ANS: $ansrule\n";
}
}
答案 0 :(得分:2)
由于keys %{$ans}
与keys %ans
不同,您应该used the latter:
$ans
和%ans
是不同的变量。
%{$ans}
尝试取消引用存储在$ans
变量中的散列引用 - 显然,未定义。您是否已将use strict;
添加到代码中,您已看到警告......
Global symbol "$ans" requires explicit package name
答案 1 :(得分:2)
你想要
foreach my $ansrule ( keys %ans )
而不是
foreach my $ansrule ( keys %$ans )
use strict; use warnings;
将有助于发现此类缺陷。