我环顾四周寻找这个问题的答案但没有找到答案;提前感谢您的帮助。
我正在尝试构造一个数组哈希,然后从哈希中随机生成数组。散列长度为3,每个数组都是一对值:
undef %pairs;
$pairs{'one'} = @pair1;
$pairs{'two'} = @pair2;
$pairs{'three'} = @pair3;
@keys = keys %pairs;
@keys = shuffle(@keys);
push (@file1, @{$pairs{$keys[0]}});
push (@file2, @{$pairs{$keys[1]}});
push (@file3, @{$pairs{$keys[2]}});
以下调用不会返回任何内容:
print STDOUT @{$pairs{$keys[0]}};
虽然下一个调用确实正确地返回了数组的长度(即2):
print STDOUT $pairs{$keys[0]};
我在这里做错了什么?
答案 0 :(得分:5)
您没有分配数组,而是指定它们的大小:
$pairs{'one'} = @pair1;
在标量上下文中,数组返回其大小,这是标量上下文。你想要:
$pairs{'one'} = \@pair1; # use direct reference
$pairs{'one'} = [ @pair1 ]; # anonymous reference using copied values
或者可能
@{ $pairs{'one'} } = @pair1;
另外,你没有使用:
use strict;
use warnings;
或者您已经知道此代码失败的原因:
print STDOUT @{$pairs{$keys[0]}};
因为你会收到致命的错误:
Can't use string ("2") as an ARRAY ref while "strict refs" in use
因为您的哈希值$pairs{$keys[0]}
设置为2
(数组的大小)。