如何在perl中拥有列表的hash



很抱歉出现语法问题。我找不到解决办法。我想在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_valuesn");
};

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

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

我想在perl中有一个散列数组

你不能。在Perl中,数组只包含标量。但是,{}将创建一个hashref,它是一个标量,是可以的。

但是这个:

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

意思与相同

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

您需要一个arrayref(它是一个标量(,而不是值的列表。

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

尝试以下操作:

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行定义数组时,只需要使用方括号。

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

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

详见perldoc perlreftut

此外,避免使用$a$b作为变量名,因为它们是为在sort块中的特殊用途而设计的。

最新更新