perl - 打印哈希变量值给出ARRAY(xxxxxxx)

时间:2013-10-23 20:04:00

标签: arrays perl hash

我有两个以下形式的数组:

root rhino root root root root root root root root root root domainte root
stam rhino jam onetwo domante ftpsi jay testwp contra raul vnod foos raul bruce

使用help I got from SO,我将它们都放入哈希中,如下所示:

my %hash;
for my $idx (0 .. $#test2) {
push @{ $hash{ $test2[$idx] } }, $test3[$idx];}
print "<br /><br /><br /><br />";
print Dumper \%hash;

给出以下输出:

$VAR1 = { 'rhino' => [ 'rhino' ], 
          'domante' => [ 'raul' ],
          'root' => [ 'stam', 'jam', 'onetwo', 'domante', 'ftpsi', 
                      'jay', 'testwp', 'contra', 'raul', 'vnod', 
                      'foos', 'bruce' ] 
        };

现在将键和值推送到2个数组,如下所示:

my @q1 = keys %hash;
 my @q2 = values %hash;

 print "<br /><br /><br /><br />";
 print @q1;
 print "<br /><br /><br /><br />";
 print @q2;

打印时,我得到正确的键,但值会打印以下输出:

ARRAY(0x9bf0b0)ARRAY(0x9bf1e8)ARRAY(0x9bf068)

如何将所有值都放入数组中?我做错了什么?

编辑:

这是我试过的:

foreach (@q1)
{       print @{$hash{$q1}};
        print "<br />";
}

但没有可行的结果。

1 个答案:

答案 0 :(得分:4)

哈希的值都是数组引用。您可以从Data::Dumper输出中判断,因为所有值都包含在[ ... ]括号中。要打印出数组的内容,您需要取消引用数组引用。

有很多方法可以做到这一点。这是一个简洁的方法,您可以根据自己的需要进行修改:

print "@$_\n" for @q2;

$_@q2元素的别名,您回忆起它是一个数组引用。表达式@$_取消引用引用,返回数组。将@$_放在双引号中将打印数组的每个元素,并在元素之间留出空格。