检查字符串是否不存在于散列中

时间:2013-09-29 09:09:39

标签: perl

我想用以下条件进行检查。 如果%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";
    }
}

https://eval.in/51453

2 个答案:

答案 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;将有助于发现此类缺陷。