2017-06-10 32 views
0

任何人都可以解釋爲什麼此警告發生在我的程序中。到目前爲止,我的有限知識perl,這應該正常工作。匿名散列中的奇數

$clone = $cromozom; 
print "-- Clone: $clone->{_secventa} | $clone->{_performanta} \n"; 
mutatie($clone); 
print "-- After mutation: $clone->{_secventa} | $clone->{_performanta} \n"; 
$clone->{_performanta} = performanta{$clone->{_secventa}}; 
$counter += 1; 

而這是performanta子程序。

sub performanta{ 
    my $sir = shift; 
    my $distanta = 0; 
    my $index; 

    for($index = 0; $index < length($sir); $index +=1){ 
     $distanta += abs(ord(substr($sir, $index, 1)) - ord(substr($solutieOptima, $index, 1))); 
    } 

    return $distanta; 

}

它說Odd number of elements in anonymous hash在這一行:$clone->{_performanta} = performanta{$clone->{_secventa}};
謝謝。

+0

看起來你已經習慣了Lua? – Borodin

回答

1

你在致電performanta{$clone->{_secventa}}。當perl的嘗試分析這一點,它越來越performanta({ $clone->{_secventa} })是:

  • 呼叫performanta子
  • 它得到一個參數
  • 一個參數是一個匿名的哈希參考,以{ ... }
  • 列表初始化初始化散列ref只有一個項目,$clone->{_secventa}

對於我而言,你並不完全清楚你的意圖,但是對於perl來說,無論你告訴它什麼都不會成爲你打算告訴它的東西,這是一個有用的警告。

+1

可能想要'performanta($ clone - > {_ secventa})' – ikegami

+0

是的,那就是問題所在。我終於明白了。 – Justplayit