Perl在哈希中访问数组时遇到问题

时间:2014-04-04 17:05:30

标签: 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 (@file2, @{$pairs{$keys[1]}});
push (@file3, @{$pairs{$keys[2]}});

以下调用不会返回任何内容:

    print STDOUT @{$pairs{$keys[0]}};

虽然下一个调用确实正确地返回了数组的长度(即2):

    print STDOUT $pairs{$keys[0]};

我在这里做错了什么?

1 个答案:

答案 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(数组的大小)。