我有一个包含以下内容的哈希表:
my %hash = (
'a' => 1,
'b' => 2,
'c' => [3, 4, 5],
);
稍后我将$hash{'c'}
拉入@array_c
作为获取功能的一部分,例如:
sub getVar {
my $id = shift;
return $hash{$id};
}
my @array_c = getVar('c');
然后我试图遍历@array_c
并打印每一行:
foreach (@array_c){
print "$_";
}
然而,我得345
ARRAY(0x100804ed0)
的所需输出
请帮助:D
编辑:
如果我print @array_c[0]->[0]
,那么我得到3
,所以我想我对如何创建嵌套数组感到有点困惑。
解决:
引用数组:
my @array_c = @{getVar('c')};
答案 0 :(得分:2)
sub getVar
返回对数组的引用,只是取消引用int:
my @array_c = @{getVar('c')};
或更改sub:
sub getVar {
my $id = shift;
return @{$hash{$id}};
}
答案 1 :(得分:1)
[3, 4, 5]
是一个arrayref,而不是一个数组。相应地修改您的代码:
my $c_arrayref = getVar('c');
foreach (@{ $c_arrayref }) {
答案 2 :(得分:1)
只需使用数组引用作为参考:
my $array_c = getVar('c');
...
foreach (@$array_c){
print "$_";
}
或取消引用存储在散列中的数组引用,在getVar:
中sub getVar {
my $id = shift;
return @{ $hash{$id} };
}
或其来电者:
my @array_c = @{ getVar('c') };
答案 3 :(得分:0)
getVar
return wantarray ? map { ref() eq 'ARRAY' ? @$_ : $_ } $hash{ $id }
: $hash{ $id }
;