2013-09-29 35 views
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

+1

我已将您的问题恢复为原始状态,因为您上次编辑[确实有效](https://eval.in/51454)。 – raina77ow

回答

2

因为keys %{$ans}是不一样的keys %ans,你应该已经used the latter$ans%ans不同变量。

%{$ans}试图取消引用存储在$ans变量中的散列引用 - 这显然没有定义。你有没有加入use strict;到你的代码,你会看到警告...

Global symbol "$ans" requires explicit package name 
+0

我使用'键%ans'根据您的suggestio更正了它,但它仍然不打印。 – pdubois

+2

不,你没有。 – raina77ow

+0

pdubois这是它更正:https://eval.in/51464 – psxls

2

你想

foreach my $ansrule (keys %ans ) 

,而不是

foreach my $ansrule (keys %$ans ) 

use strict; use warnings;将是检测有帮助这样的缺陷。

相关问题