【问题标题】:how to have hash of list in perl如何在perl中获得列表的哈希值
【发布时间】:2011-11-22 20:46:19
【问题描述】:

抱歉这个语法问题。我找不到解决方案。 我想在 perl 中有一个哈希数组,它们每个都有字符串和数组。 我正在尝试编写以下代码:

use strict;
my @arr = (
       { name => "aaa" , values => ("a1","a2") },
       { name => "bbb" , values => ("b1","b2","b3") }
      );


foreach $a (@arr) {
  my @cur_values = @{$a->{values}};
  print("values of $a->{name} = @cur_values\n");
};

但这对我不起作用。我收到编译错误和警告(使用 perl -w)

a.pl 第 2 行匿名哈希中的奇数个元素。 在 a.pl 第 9 行使用“strict refs”时,不能使用字符串 ("a1") 作为 ARRAY ref。

【问题讨论】:

  • perldoc.perl.org/perldsc.html 是这类事情的一个很好的参考。
  • 尽量避免使用$a(和$b)作为变量名——这些是为sort保留的特殊情况...
  • 在开发 Perl 代码时应始终启用警告。它会指出哪里有问题......

标签: perl perl-data-structures


【解决方案1】:

我想在 perl 中有一个哈希数组

你不能。 Perl 中的数组只包含标量。但是,{} 会创建一个 hashref,它是一个标量,很好。

但是这个:

{ name => "aaa" , values => ("a1","a2") }

意思同:

{ name => "aaa" , values => "a1", "a2" },

您需要一个数组引用(它是一个标量),而不是值的列表。

{ name => "aaa" , values => ["a1","a2"] }

【讨论】:

    【解决方案2】:
    my @arr = (
                { name => "aaa" , values => ["a1","a2"]      },
                { name => "bbb" , values => ["b1","b2","b3"] }
              );
    

    列表(使用() 制作)将变平。 Arrayrefs ([]) 不会。

    请参阅perldoc perlreftut 了解更多信息。

    另外,避免使用 $a$b 作为变量名,因为它们是专门用于 sort 块内的特殊用途。

    【讨论】:

      【解决方案3】:

      尝试以下方法:

      use strict;
      my @arr = (
             { name => "aaa" , values => ["a1","a2"] },
             { name => "bbb" , values => ["b1","b2","b3"] }
            );
      
      
      foreach $a (@arr) {
        my @cur_values = @{$a->{values}};
        print("values of $a->{name}: ");
          foreach $b (@cur_values){
              print $b . ", "
          }
          print "\n";
      };
      

      在第 3 行和第 4 行定义数组时,您只需要使用方括号即可。

      【讨论】:

      • 你真的应该使用词法循环变量(而不是使用$a,它具有神奇的属性。)
      猜你喜欢
      • 2021-12-30
      • 2016-07-22
      • 2015-01-10
      • 2015-01-18
      • 1970-01-01
      • 2014-10-17
      • 2010-10-20
      • 2023-04-07
      • 2013-08-26
      相关资源
      最近更新 更多