Arrays 在perl中解析数组数组
我试图解析一个数组,但我得到了一个错误Arrays 在perl中解析数组数组,arrays,perl,Arrays,Perl,我试图解析一个数组,但我得到了一个错误 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 m
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;
}
正如Ivan指出的,您的
返回值与您分配给它的值不匹配:
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;
正如Ivan指出的,您的返回值与您分配给它的值不匹配:
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;
问题是您试图将哈希引用分配给hashmy%names=getNames(\@info)代码>。将其更改为与参考一起工作:
my $names = getNames(\@info);
或返回哈希:
return %names;
问题是您试图将哈希引用分配给hashmy%names=getNames(\@info)代码>。将其更改为与参考一起工作:
my $names = getNames(\@info);
或返回哈希:
return %names;