2

私はPerlにマップ構造を持っており、それはいくつかのユーティリティから得ています。そのダンプは次のようになります。

$VAR1 = {
  'A0' => 'me_one',
  'A2' => 'me_two',
  'A6' => 'me_six'
}

マップに特定のキーが存在するかどうかを検索したい。A4地図にあるかどうか知りたいとしましょう。

ここで、を使用するif (exists $map{'A4'})と、ビルド中にエラーが発生し$map{ます。

そして、を使用するif (exists $map->{'A4'})と、エラーは発生せず、目的の結果が得られます。ただし、インターネットで検索するすべての場所で、キーがマップに存在するかどうかを確認するために、Perlの構文は次のようになります。if (exists $map{key})

今、私の推論では、ユーティリティから取得するものはマップではありませんが、それでもダンプからのマップのように見えます。誰が何が起こっているのか考えていますか?ありがとうございました。

編集: @raina77owの回答に感謝します。彼の説明をさらに進めるためにこれを追加します。

my %map;
print $map{key};
my $map_ref = \%map; # The reference was what the utility was returning
print $map_ref->{key};
4

1 に答える 1

4

この行は、ハッシュ$map{key}の特定の要素をアドレス指定するときに使用されます。例えば: %map

my %map = (
  a => 'a',
  b => 'b'
);
print $map{a}; # 'a'

この行は、 hashref$map->{key}の特定の要素をアドレス指定するときに使用されます。演算子は、特に参照を「区別」するために使用されます。 $map->

my $map_ref = {
  a => 'a',
  b => 'b'
};
print $map_ref->{a}; # 'a'

前者の場合は通常の括弧が使用され、後者の場合は中括弧(いわゆるanonymous hash)であることに注意してください。

于 2013-03-27T10:27:39.103 に答える