【问题标题】:perl - printing hash variable values gives ARRAY(xxxxxxx) [duplicate]perl - 打印散列变量值给出 ARRAY(xxxxxxx) [重复]
【发布时间】:2013-10-24 04:15:09
【问题描述】:

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

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 />";
}

但没有得到可行的结果。

【问题讨论】:

  • 你的哈希是叫%hash还是叫%owners
  • @mob - %hash - 这是一个错字。已更正。对不起
  • 你没有得到可行的结果,因为$_foreach 循环的索引,而不是$q1。 (你在用strictwarnings吗?)

标签: arrays perl hash


【解决方案1】:

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

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

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

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

【讨论】:

  • 感谢您的快速回答。我将如何进行打印以使每个键的值在单独的行上?
  • 作为替代方案,您可以在打印数组之前本地调整数组输出分隔符,即local $" = "\n";。否则加入数组,即print (join "\n", @$_);。如果使用 HTML,请将 \n 替换为 &lt;br /&gt;
猜你喜欢
  • 2019-01-13
  • 1970-01-01
  • 2015-04-14
  • 2012-06-05
  • 2014-04-25
  • 2017-06-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多