我在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};
答案 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
)。