0

ハッシュへの参照がある場合、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

私が試みたすべての方法を期待しているわけではありませんが、少なくとも1つはそうすべきです。私はperldoc、他のSOの質問、およびグーグルをあちこちで調べました、そして私が思いついたのはこれらの行のいくつかで使用する構文が機能するはずであるということだけです。

4

1 に答える 1

2

この線

%href = \%simple;

あなたが思っていることをしません。perl -w(またはuse warnings;)は、奇数のハッシュ要素に関する警告を表示します。これは、それが何をしようとしたかについての十分なヒントになるはずです(そして、考えてみれば、「悪い構文」がそうではない理由)。試す

$href = \%simple;

use warnings;また、との使い方を学びuse strict;常にそれらを使用してください。

于 2012-04-13T00:28:57.983 に答える