foreach循环

问题描述:

内调用子程序N次我有两个散列对应于下列文件阵列(HOA)的:foreach循环

A 10 15 20 25 
B 21 33 21 23 
C 43 14 23 23 
D 37 45 43 49 

这里是我的高阶像差。

my %first_HoA = (
     'A'  => [ '10', '15', '20', '25'], 
     'B'  => [ '21', '33', '21', '23'], 
    ); 

my %second_HoA = (
     'A'  => [ '10', '15', '20', '25'], 
     'B'  => [ '21', '33', '21', '23'], 
     'C'  => [ '43', '14', '23', '23'], 
     'D'  => [ '37', '45', '43', '49'], 
    ); 

对于第二家乡地址(A-d)每$关键,我想调用一个子程序,它不计算在它的相应的阵列和第一家乡地址(A-B)每 $键的阵列。根据计算结果,子程序应从第一个HoA中返回一个产生最高值的密钥。换句话说,只应该为第二个HoA中的每个$ key调用子例程,并根据第一个HoA中的密钥数组的计算结果返回第一个HoA中的$ key,从而产生最佳值。

下面是我现在的工作方式。说我有叫calculate

my $iterations = 1; 
foreach my $key (keys %second_HoA) { 

    for my $arrayref (values %first_HoA){ 
     calculate($first_HoA{$key}, $arrayref); 
     print "Iteration: $iterations\n"; 
     $iterations++; 
    } 
} 

正如你可以看到一个任意子程序,这叫calculate 8倍。我只想为%second_HoA中的每个$ key调用calculate这是4次,但我还需要通过$arrayref来执行子例程中的计算。

有谁知道我该怎么做?

我想这样做的另一种方式是通过在first_HoA的hash_ref像这样:

foreach my $key (keys %second_HoA) { 
    calculate($second_HoA{$key}, \%first_HoA); 
    print "Iteration: $iterations\n"; 
    $iterations++; 
} 

这样做可以调用calculate 4倍这是我想要的,但它在子程序复杂的事情。

有任何建议。谢谢。

+0

请发布子程序代码 – amphibient

+0

该子程序很长并涉及,但我会尝试发布它的最小表示形式。 – cooldood3490

+0

好吧我刚刚发布子程序 – cooldood3490

你说calculate($second_HoA{$key}, \%first_HoA)“使事情复杂化”,但我不明白这是可能的。在我看来,这是您需要的最少信息,而且格式便捷。

任何东西都会使事情变得复杂,因为你不需要做计算的信息。

+0

是的,我会尝试这种方法。一旦我进入子程序,我可以参照哈希'%first_HoA',然后我可以遍历哈希值(数组的元素)并进行计算。 – cooldood3490