1

我想在以下条件下进行检查。如果 的成员%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

4

2 回答 2

2

因为keys %{$ans}keys %ans, 不同,您应该使用后者: $ans并且%ans不同的变量。

%{$ans}尝试取消引用存储在变量中的哈希引用- 显然,该$ans变量未定义。您是否已添加use strict;到代码中,您会看到警告...

Global symbol "$ans" requires explicit package name
于 2013-09-29T09:12:56.987 回答
2

你要

foreach my $ansrule ( keys %ans  )

代替

foreach my $ansrule ( keys %$ans  )

use strict; use warnings;将有助于检测此类缺陷。

于 2013-09-29T09:15:02.917 回答