2013-09-29 4 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

Я исправил его в соответствии с вашим предложением с помощью 'key% ans', но он все равно не печатает. – 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; было бы полезно в обнаружении такие недостатки.

Смежные вопросы