创建数组哈希:显示数组引用

时间:2013-03-04 12:57:48

标签: perl

下面是我的代码(只是使用哈希),我想创建一个数组哈希(键分配给数组)。但我得到输出作为数组引用。为什么要显示此数组引用?

 #!/usr/bin/perl
 my @result = (0,0,0);
 my @operator = ('AP', 'MP', 'UP');
 my %operator_res;

 for ( $i = 0; $i <= $#operator; $i++ ) {
     if ( $i == 2 ) {
         @result = (4,5,6);
     } elsif ( $i == 1 ) {
         @result = (1,2,3);
     }
     @{$operator_res{$operator[$i]}} = @result;
 }
 foreach $keys (%operator_res) {
     print "$keys:";
     #print "@{$operator_res{$keys}}\n";
     print "$operator_res{$keys}[0], $operator_res{$keys}[1], $operator_res{$keys}[2]\n";
 }

输出

UP:4, 5, 6
ARRAY(0x17212e70):, ,   Why is this array reference printing?
AP:0, 0, 0
ARRAY(0x17212e00):, ,
MP:1, 2, 3
ARRAY(0x17212e20):, ,

4 个答案:

答案 0 :(得分:4)

foreach $keys (%operator_res)

应该是

foreach $keys (keys %operator_res)

答案 1 :(得分:1)

您的foreach循环遍历%operator_res的每个元素,而不仅仅是密钥。正如ikagim已经回答的那样,你必须使用keys来获取哈希的密钥。

如果您在Data::Dumper上看%operator_res输出为

$VAR1 = 'UP';
$VAR2 = [
          4,
          5,
          6
        ];
$VAR3 = 'AP';
$VAR4 = [
          0,
          0,
          0
        ];
$VAR5 = 'MP';
$VAR6 = [
          1,
          2,
          3
        ];

如您所见,每个元素总会得到两次迭代:一个用于键,另一个用于数组ref。

答案 2 :(得分:0)

Perl中的哈希值必须是标量。要模拟多维哈希,请将 references 的值用于哈希或数组。

该行

@{$operator_res{$operator[$i]}} = @result;
你问题中的

相当于

$operator_res{ $operator[$i] } = [ @result ];

也就是说,当时与键$operator[$i]关联的值是引用到新数组,其内容与@result相同。

有很多例子,请阅读perllol documentation

答案 3 :(得分:0)

您可以使用Data :: Dumper以格式良好的方式打印数据:

use Data::Dumper;
print Dumper(\%operator_res);

问:为什么这个数组引用打印?

答:由于这一行:打印“$ keys:”;