为什么测试一个密钥是否存在于一个不能用于ref hash的哈希?

时间:2012-04-13 00:23:28

标签: perl hash reference exists

当我有对哈希的引用时,如何判断一个密钥是否存在于has中?以下内容似乎简单明了(在我的专业水平上),但打印出的不是预期的东西:

%simple = (a => 8, b=> 9);
print  0+exists $simple{a},  0+exists $simple{c},   "\n";    # prints 10

%href = \%simple;
print  0+exists $href{a},  0+exists $href{c},  "\n";        # expect fail; bad syntax
print  0+exists $href->{a},  0+exists $href->{c},  "\n";    # should work
print  0+exists ${$href}{a},  0+exists ${$href}{c},  "\n";  #  should work
print  0+exists $$href{a},  0+exists $$href{c},  "\n";      # not sure

# see if attempt to ask about {c} accidently created it
print %simple, "\n";

打印出来

10
00
00
00
00
a8b9

我期待(非常乐观):

10
10
10
10
10
a8b9

我不期望我尝试过的所有方式,但至少应该有一个方法。我已经完成了perldoc,其他SO问题以及谷歌搜索,我想到的是我在其中一些行中使用的语法应该有效。

1 个答案:

答案 0 :(得分:2)

该行

%href = \%simple;

不按照你的想法行事; perl -w(或use warnings;)会向您发出有关奇数个哈希元素的警告,这应该足以暗示它尝试做什么(并且,如果您考虑它,为什么您的“糟糕的语法”不是)。尝试

$href = \%simple;

另外,请学会使用use warnings;use strict;始终使用它们。