Arrays Perl无法访问散列中的数组
我四处寻找这个问题的答案,但没有找到答案;提前感谢你的帮助 我试图构造数组的散列,然后从散列中随机生成数组。散列长度为3,每个数组是一对值:Arrays Perl无法访问散列中的数组,arrays,perl,hash,Arrays,Perl,Hash,我四处寻找这个问题的答案,但没有找到答案;提前感谢你的帮助 我试图构造数组的散列,然后从散列中随机生成数组。散列长度为3,每个数组是一对值: undef %pairs; $pairs{'one'} = @pair1; $pairs{'two'} = @pair2; $pairs{'three'} = @pair3; @keys = keys %pairs; @keys = shuffle(@keys); push (@file1, @{$pairs{$keys[0]}}); push (
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):
我在这里做错了什么?您不是在分配阵列,而是在分配阵列的大小:
$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
(数组的大小)。您没有分配数组,而是分配它们的大小:
$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
(数组的大小)。+1:很好的解释。阅读您的答案@TLP.+1:很好的解释,这绝对是一种乐趣。阅读您的答案@TLP绝对是一种乐趣。