2

我正在尝试收集我存储在哈希哈希中的值,但我对 perl 是如何做到这一点感到有点困惑。所以,我创建我的哈希哈希如下:

 my %hash;
 my @items;

 #... some code missing here, generally I'm just populating the @items list 
 #with $currentitem items

 while (<FILE>) { #read the file

         ($a, $b) = split(/\s+/,$_,-1);
         $hash{$currentitem} => {$a => $b};
         print $hash{$currentitem}{$a} . "\n";#this is a test and it works
}

上面的代码似乎工作。现在,重点是:我有一个数组@items,它保留了$currentitem 的值。我想做这样的事情:

@test = keys %hash{ $items[$num] };

这样我就可以获得特定项目的所有键/值对。我已经尝试了上面的代码行,以及

 while ( ($key, $value) = each( $hash{$items[$num]} ) ) {

      print "$key, $value\n";
 }

我什至尝试按如下方式填充哈希:

$host{ "$currentcustomer" }{"$a"} => "$b";

根据我遇到的各种在线资源,这似乎更正确。但是,我仍然无法访问该哈希中的数据......有什么想法吗?

4

2 回答 2

2

你说这行得通,我很困惑:

$hash{$currentitem} => {$a => $b};

那不应该工作(并且对我不起作用)。=>运算符是一种特殊的逗号,而不是赋值(参见perlop 。此外,右边的结构产生了一个新的匿名散列。使用它,一个新的匿名散列将覆盖您尝试添加的每个元素的旧散列。您将永远只有一个元素$currentitem

这是您要分配的内容:

$hash{$currentitem}{$a} = $b;

以下是获取密钥的方法:

keys %{ $hash{ $items[$num] } };

我建议阅读Perl 参考资料以更好地处理这个问题。语法起初可能有点棘手。

于 2012-09-27T10:56:09.410 回答
1

长答案在perldoc perldsc中。

简短的回答是:

keys %{ $expr_producing_hash_ref };

在你的情况下,我相信这是

keys %{ $hash{$items[$num]} }; 
于 2012-09-27T10:49:07.530 回答