0

当我有对哈希的引用时,如何判断一个键是否存在?以下内容看似简单明了(以我的专业水平),但打印出的内容与预期不同:

%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 问题和谷歌搜索,我想出的只是我在其中一些行中使用的语法应该可以工作。

4

1 回答 1

2

线

%href = \%simple;

没有做你认为它做的事;perl -w(或use warnings;)会给你一个关于奇数个散列元素的警告,这应该是一个关于它试图做什么的充分暗示(如果你考虑一下,为什么你的“坏语法”不是)。尝试

$href = \%simple;

另外,学习使用use warnings;and use strict;,并始终使用它们。

于 2012-04-13T00:28:57.983 回答