【问题标题】:Difference between $map{$string} and $map->{$string} in PerlPerl 中 $map{$string} 和 $map->{$string} 的区别
【发布时间】:2013-03-17 09:33:58
【问题描述】:

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

【问题讨论】:

    标签: perl hash map


    【解决方案1】:

    $map{key} 行用于处理 hash %map 的特定元素。例如:

    my %map = (
      a => 'a',
      b => 'b'
    );
    print $map{a}; # 'a'
    

    $map->{key} 行用于处理 hashref $map 的特定元素。 -> 运算符专门用于“尊重”引用。

    my $map_ref = {
      a => 'a',
      b => 'b'
    };
    print $map_ref->{a}; # 'a'
    

    请注意,在第一种情况下使用正则括号,在第二种情况下使用大括号(定义所谓的anonymous hash)。

    【讨论】:

    • 谢谢。这很好解释。 :)。在接受之前,我会在您的回答中做一点补充。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-05
    • 2013-12-18
    • 2013-07-16
    • 1970-01-01
    • 2019-09-12
    相关资源
    最近更新 更多