如何从已传递给perl中的子例程的哈希中检索数组

1 arrays perl hash

我正在尝试编写一个子程序,它接受数组的散列作为参数.但是,当我尝试检索其中一个数组时,我似乎得到了数组的大小而不是数组本身.

my(%hash) = (  );
$hash{"aaa"} = ["blue", 1];

_subfoo("test", %hash);

sub _subfoo {

    my($test ,%aa) = @_;

    foreach my $name (keys %aa) {
        my @array = @{$aa{$name}};
        print $name. " is ". @array ."\n";
    }
}
Run Code Online (Sandbox Code Playgroud)

这比我预期的那样返回2而不是(蓝色,1).在子例程中是否还有其他方法可以处理哈希中的数组?

如果这对于堆栈溢出,第一次海报和编程新手来说太简单了,请道歉.

mu *_*ort 10

您将@array阵列置于标量上下文中:

print $name. " is ". @array ."\n";
Run Code Online (Sandbox Code Playgroud)

标量上下文中的数组为您提供了数组中元素的数量,并且@array恰好有2个元素.尝试其中之一:

print $name . " is " . join(', ', @array) . "\n";
print $name, " is ", @array, "\n";
print "$name is @array\n";
Run Code Online (Sandbox Code Playgroud)

你会看到你的元素@array.使用join可让您随意粘贴元素; 第二个@array在列表上下文中进行评估,并将值混合在一起而不将它们分开; 第三个@array通过将其元素连接在一起进行插值$"(默认情况下为单个空格).

  • +1.你也可以写'print'$ name是@array \n"`,它将隐含地将`@ array`的元素加到`$``的当前值(默认为'''`). (4认同)