我有七个哈希是哈希的子集,%ALL。
%ALL看起来像这样:
ID# => ID# Date Measure1 Measure2 Measure3 ... Measure6
ID# => ID# Date Measure1 Measure2 Measure3 ... Measure6
ID# => ID# Date Measure1 Measure2 Measure3 ... Measure6
所有七个子集哈希都是这样的:
ID# => Measure1
ID# => Measure1
ID# => Measure1
我想系统地检查两个或三个哈希的每个组合,并列出每个组合的所有命中。我知道CPAN上有模块用于这种组合分析,但我想提出一个纯脚本解决方案而不是安装新软件。
我尝试编写以下函数并使用两个哈希引用调用它:
ComPair(\%ATG12, \%ATG5);
sub ComPair {
my $ref = shift;
my $chek = shift;
while ( my ( $key, $value ) = each($ref) ) {
if ( exists $chek{$key} ) { print $ALL{$key} }
}
}
并收到以下错误消息。
Global symbol "%chek" requires explicit package name at Combo_Ranks2.pl line 41.
我认为如果我能够使用这对比较函数,我可以设计某种循环来在每对哈希上运行它,并且应用相同的方法进行三元组比较只会稍微复杂一些。
现在,我需要弄清楚如何使我的子程序工作。我最好的猜测是它不能识别我作为哈希传递给它的第二个哈希,但我甚至不确定是这种情况。有什么想法吗?
答案 0 :(得分:3)
“$chek{$key}
”告诉Perl查找名为%chek
的哈希值,但您希望使用对哈希值$chek
的标量引用。这可以通过编写$chek->{$key}
或$$chek{$key}
来完成。