0

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

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

使用我从 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 />";
}

但没有得到可行的结果。

4

1 回答 1

4

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

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

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

$_ is an alias to an element of @q2, which you'll recall is an array reference. The expression @$_ dereferences the reference, returning the array. Putting @$_ in double quotes will print every element of the array with a space between the elements.

于 2013-10-23T20:09:59.413 回答