我有一个 Perl 中的映射结构,是从某些实用程序中获得的。其转储如下所示:
$VAR1 = {
'A0' => 'me_one',
'A2' => 'me_two',
'A6' => 'me_six'
}
我想搜索 map 中是否存在特定键。假设我想知道 A4
是否在 map 中。
现在,如果我使用 if (exists $map{'A4'})
,我会在构建期间在 $map{
处收到错误。
如果我使用 if (exists $map->{'A4'})
,我不会收到错误,并且会得到所需的结果。然而,我在互联网上搜索的任何地方,要检查映射中是否存在某个键,Perl 中的语法是 if (exists $map{key})
现在我的推断是,我从实用程序中获得的不是 map ,尽管对我来说仍然看起来像来自转储的 map 。有人知道发生了什么事吗?谢谢。
编辑:感谢@raina77ow的回答。添加此内容以进一步解释。
my %map;
print $map{key};
my $map_ref = \%map; # The reference was what the utility was returning
print $map_ref->{key};
最佳答案
当您寻址 hash %map
的特定元素时,将使用 $map{key}
行。例如:
my %map = (
a => 'a',
b => 'b'
);
print $map{a}; # 'a'
当您寻址 hashref $map
的特定元素时,将使用 $map->{key}
行。 ->
运算符专门用于“引用”引用。
my $map_ref = {
a => 'a',
b => 'b'
};
print $map_ref->{a}; # 'a'
请注意,在第一种情况下使用常规括号,在第二种情况下使用大括号(定义所谓的匿名哈希
)。
关于perl - Perl 中 $map{$string} 和 $map->{$string} 之间的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15656555/