很抱歉出现语法问题。我找不到解决办法。我想在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
块中的特殊用途而设计的。