我正在尝试解析一个数组数组,但是我收到了错误
Reference found where even-sized list expected
以下是该计划:
use Modern::Perl;
my @info=(
['k1','v1',1,2],
['k2','v2',2,3]
);
my %names=getNames(\@info);
sub getNames {
my ($info) = @_;
my %names;
foreach my $item (@$info) {
$names{@$item[0]}=@$item[1];
}
return \%names;
}
答案 0 :(得分:3)
正如Ivan所指出的,您的return
值与您分配的值不符:
my %names = getNames(\@info);
sub getNames {
...
return \%names;
}
%names
排除了偶数个元素,因为它是一个哈希值,但是你要为它分配一个哈希引用,这是一个单独的元素。因此错误。
你的子程序的这一行也有点怀疑:$names{@$item[0]}=@$item[1];
。也许您打算使用$names{$item->[0]}=$item->[1];
?
如果您尝试将数组数组转换为带有指向其余值的键的哈希值,则可以使用以下命令:
my @info=(
['k1','v1',1,2],
['k2','v2',2,3],
);
my %names = map {$_->[0] => [@{$_}[1..$#$_]]} @info;
use Data::Dump;
dd \%names;
输出:
{ k1 => ["v1", 1, 2], k2 => ["v2", 2, 3] }
但是,如果您只想要第一个"值",那么以下就足够了:
my %names = map {$_->[0] => $_->[1]} @info;
答案 1 :(得分:2)
问题在于您尝试将哈希引用分配给哈希my %names=getNames(\@info);
。将其更改为参考:
my $names = getNames(\@info);
或者返回哈希:
return %names;