4

对不起这个语法问题。我找不到解决方案。我想在 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 引用。

4

3 回答 3

8

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

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

但是这个:

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

意思相同:

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

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

{ name => "aaa" , values => ["a1","a2"] }
于 2011-09-22T13:49:56.580 回答
6

尝试以下操作:

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

于 2011-09-22T13:55:13.207 回答
2
my @arr = (
            { name => "aaa" , values => ["a1","a2"]      },
            { name => "bbb" , values => ["b1","b2","b3"] }
          );

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

查看perldoc perlreftut更多。

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

于 2011-09-22T13:53:12.550 回答