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

标签 perl hash dictionary

我有一个 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/

相关文章:

perl - 有没有像 PHP 的 GeSHi 这样的 Perl 语法高亮器(输出到 HTML)?

perl - 用perl初始化常量变量

perl - 使用 Parallel::ForkManager 并行执行命令

algorithm - 如何访问 SimpleMembershipProvider 哈希算法

c# - 使用 SHA256 将字符串转换为 Guid 而不截断

python - 如何将值列表转换为字典列表,并将相同的键添加到每个值?

Java:如何以原子方式替换 Map 中的所有值?

perl - 杀死长时间运行的 Fastcgi 进程

php - 在 sql 比较查询之前将长字符串转换为短哈希 - 提高性能?

python - 将字典保存到 CSV 文件