将多个哈希值传递给Perl中的子例程

时间:2014-06-03 19:22:23

标签: perl hash subroutine

我有七个哈希是哈希的子集,%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.

我认为如果我能够使用这对比较函数,我可以设计某种循环来在每对哈希上运行它,并且应用相同的方法进行三元组比较只会稍微复杂一些。

现在,我需要弄清楚如何使我的子程序工作。我最好的猜测是它不能识别我作为哈希传递给它的第二个哈希,但我甚至不确定是这种情况。有什么想法吗?

1 个答案:

答案 0 :(得分:3)

$chek{$key}”告诉Perl查找名为%chek的哈希值,但您希望使用对哈希值$chek的标量引用。这可以通过编写$chek->{$key}$$chek{$key}来完成。