Arrays 循环通过从哈希表检索的数组

Arrays 循环通过从哈希表检索的数组,arrays,perl,hashtable,Arrays,Perl,Hashtable,我有一个包含以下内容的哈希表: 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\u c,并打印每一行: foreach (

我有一个包含以下内容的哈希表:

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\u c
,并打印每一行:

foreach (@array_c){
  print "$_";
}
然而,我得到的不是所需的
345
输出,而是
数组(0x100804ed0)

请帮忙:D

编辑:

如果我打印@array\u c[0]->[0],那么我会得到
3
,所以我想我对如何创建嵌套数组有点困惑

已解决:

继续延迟阵列:

my @array_c = @{getVar('c')};

子getVar
返回对数组的引用,只需取消引用即可:

my @array_c = @{getVar('c')};
或更改子项:

sub getVar {
  my $id = shift;
  return @{$hash{$id}};
}

子getVar
返回对数组的引用,只需取消引用即可:

my @array_c = @{getVar('c')};
或更改子项:

sub getVar {
  my $id = shift;
  return @{$hash{$id}};
}

[3,4,5]
是arrayref,而不是数组。相应地修改您的代码:

my $c_arrayref = getVar('c');

foreach (@{ $c_arrayref }) {

阅读和阅读。

[3,4,5]
是一个arrayref,而不是一个数组。相应地修改您的代码:

my $c_arrayref = getVar('c');

foreach (@{ $c_arrayref }) {

阅读并。

仅使用数组引用作为引用:

my $array_c = getVar('c');
...
foreach (@$array_c){
    print "$_";
}
或在getVar中取消对哈希中存储的数组引用的引用:

sub getVar {
    my $id = shift;
    return @{ $hash{$id} };
}
或其调用方:

my @array_c = @{ getVar('c') };

仅使用数组引用作为引用:

my $array_c = getVar('c');
...
foreach (@$array_c){
    print "$_";
}
或在getVar中取消对哈希中存储的数组引用的引用:

sub getVar {
    my $id = shift;
    return @{ $hash{$id} };
}
或其调用方:

my @array_c = @{ getVar('c') };

您的
getVar

return wantarray ? map { ref() eq 'ARRAY' ? @$_ : $_ } $hash{ $id }
     :             $hash{ $id }
     ;

您的
getVar

return wantarray ? map { ref() eq 'ARRAY' ? @$_ : $_ } $hash{ $id }
     :             $hash{ $id }
     ;