【问题标题】:Perl: Different ways to access nested hash keysPerl:访问嵌套哈希键的不同方法
【发布时间】:2012-09-22 01:02:07
【问题描述】:

我几乎是 Perl 的新手。所以只是想知道访问嵌套哈希值的两种方式之间的区别。

考虑以下哈希:

my %hsh = ( 
    'fruits' => { 
        'red'    => 'apple', 
        'yellow' => 'banana', 
    },
    'veg' => {
        'red'    => 'capcicum',
        'yellow' => 'lemon',
    },
);

#way 1
print $hsh{'fruits'}{'red'}; 

#way 2
print $hsh{'fruits'}->{'red'};

两者都有相同的输出apple。但是这两种方式有什么区别呢?

【问题讨论】:

    标签: perl hash


    【解决方案1】:

    -> 运算符用于取消引用哈希或数组引用。在您的情况下,不需要,因为 Perl 在处理多维数据结构时假定取消引用。但是在其他情况下,这是必要的:

    my $ref = [ 'a','b','c' ];
    
    print $ref[0];    #Fails
    print $ref->[0];  #Succeeds
    

    【讨论】:

      【解决方案2】:

      没有区别。 Perl 的哲学是“有不止一种方法可以做到这一点”。

      -> 只是一个明确的取消引用。当你省略它时,Perl通常知道你的意思。在某些情况下,您可能希望明确拥有它。

      编辑我的帖子不清楚。在这种情况下,Perl 知道您的意思,但正如 @cHao 指出的那样,有时它不知道。

      【讨论】:

      • Perl 仍然通常知道你的意思。 -> 在某些地方仍然需要(例如在引用和第一个索引之间),但可以在索引之间省略。
      【解决方案3】:

      -> 是一个解引用运算符;它与散列refs 一起使用,而不是散列。 Hashrefs 用于避免创建哈希数据的副本,从而减少 CPU 和内存使用。

      哈希

      创建哈希:

      my %hash = ('red' => 'apple');
      

      my %hash = %$hashref;
      

      访问使用:

      print $hash{'red'};
      

      哈希引用

      创建哈希引用:

      my $hashref = { 'red' => 'apple' };
      

      my $hashref = \%hash;
      

      访问使用:

      print $hashref->{'red'};
      

      【讨论】:

      • 哈希引用 is 对哈希的引用。它不用于传递对哈希的引用。并且不可能将哈希传递给 sub 或从 sub 返回一个,因此它不是替代方法。
      猜你喜欢
      • 2011-02-14
      • 1970-01-01
      • 1970-01-01
      • 2020-07-07
      • 1970-01-01
      • 2015-04-01
      • 2018-12-17
      • 2013-06-06
      • 2011-12-29
      相关资源
      最近更新 更多