Perl中$ map {$ string}和$ map-> {$ string}之间的区别

时间:2013-03-27 10:25:00

标签: perl hash map

我在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};

1 个答案:

答案 0 :(得分: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)。