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

当您处理hash$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 回答