我正在尝试收集存储在散列哈希值中的值,但我对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";
根据我遇到的各种在线资源,这似乎更正确。但是,我仍然无法访问该哈希中的数据......有什么想法吗?
答案 0 :(得分:2)
我很困惑你说这有效:
$hash{$currentitem} => {$a => $b};
这应该不起作用(并不适合我)。 =>
运算符是一种特殊的逗号,而不是赋值(请参阅perlop)。此外,右侧的构造会生成一个新的匿名哈希。使用它,新的匿名哈希将覆盖您尝试添加的每个元素的旧哈希。每个$currentitem
只能有一个元素。
以下是您要分配的内容:
$hash{$currentitem}{$a} = $b;
以下是获取密钥的方法:
keys %{ $hash{ $items[$num] } };
我建议您阅读Perl references以便更好地处理此问题。一开始语法可能有点棘手。
答案 1 :(得分:1)
长答案在perldoc perldsc。
简短回答是:
keys %{ $expr_producing_hash_ref };
在你的情况下,我相信它是
keys %{ $hash{$items[$num]} };