当我有对哈希的引用时,如何判断一个密钥是否存在于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问题以及谷歌搜索,我想到的是我在其中一些行中使用的语法应该有效。
答案 0 :(得分:2)
该行
%href = \%simple;
不按照你的想法行事; perl -w
(或use warnings;
)会向您发出有关奇数个哈希元素的警告,这应该足以暗示它尝试做什么(并且,如果您考虑它,为什么您的“糟糕的语法”不是)。尝试
$href = \%simple;
另外,请学会使用use warnings;
和use strict;
,始终使用它们。