我正在尝试编写一个子程序,它接受数组的散列作为参数.但是,当我尝试检索其中一个数组时,我似乎得到了数组的大小而不是数组本身.
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
通过将其元素连接在一起进行插值$"
(默认情况下为单个空格).