2012-04-13 10 views
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 

私が働こうとしたすべての方法は期待していませんが、少なくとも1つはすべきです。私はperldoc、その他の質問、グーグル・グーグルを行ってきました。私が思いつくのは、これらの行のいくつかで使っている構文がうまくいくということです。

答えて

2

ライン

%href = \%simple; 

あなたはそれがないと思う何をしません。 perl -w(またはuse warnings;)は、奇妙な数のハッシュ要素に関する警告を表示します。ハッシュ要素は、何をしようとしたかについての十分なヒントでなければなりません。 。 use warnings;use strict;を使用することを学ぶ、また

$href = \%simple; 

を試してみて、そして常にそれらを使用しています。

+0

ああ、私は前にそのブービーを作りました。はい、非常に短い実験であっても、厳密で警告は良好です。 – DarenW

+1

AKA 'Use Modern :: Perl' – Dynamic

関連する問題