Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays Perl无法访问散列中的数组_Arrays_Perl_Hash - Fatal编程技术网

Arrays Perl无法访问散列中的数组

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 (

我四处寻找这个问题的答案,但没有找到答案;提前感谢你的帮助

我试图构造数组的散列,然后从散列中随机生成数组。散列长度为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):


我在这里做错了什么?

您不是在分配阵列,而是在分配阵列的大小:

$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绝对是一种乐趣。