我有两个以下形式的数组:
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 />";
}
但没有可行的结果。
答案 0 :(得分:4)
哈希的值都是数组引用。您可以从Data::Dumper
输出中判断,因为所有值都包含在[ ... ]
括号中。要打印出数组的内容,您需要取消引用数组引用。
有很多方法可以做到这一点。这是一个简洁的方法,您可以根据自己的需要进行修改:
print "@$_\n" for @q2;
$_
是@q2
元素的别名,您回忆起它是一个数组引用。表达式@$_
取消引用引用,返回数组。将@$_
放在双引号中将打印数组的每个元素,并在元素之间留出空格。