因此,我有一個散列數組@doc_vector。我想通過每個散列並修改鍵的值。問題遍歷散列數組並實際更改原始數組中的散列值
,我是有工作的原代碼如下:
my %hash=undef;
foreach my $hash (@doc_vector) {
foreach my $key (keys %{ $hash }) {
$hash{ $key } = log($dnum/$dfreq_hash{$key});
}
}
但是,當我實際上是指在@doc_vector哈希值,這些值從未修改。 我能夠做修改特定值以下(我保存的最後一個散列項的指標,其值我知道一個鍵,分別爲$ last_doc和$字):這工作得很好
foreach my $hash (@doc_vector) {
foreach my $key (keys %{ $hash }) {
if ($key eq $word)
{
$doc_vector[$last_doc]{$word}=log($dnum/$dfreq_hash{$key});
}
}
}
,但是當我試圖爲我所有的項目都這樣做:
foreach my $hash (@doc_vector) {
foreach my $key (keys %{ $hash }) {
$doc_vector[$hash]{$key}=log($dnum/$dfreq_hash{$key});
}
print "I'm going infinite\n";
}
我結束了印刷「我要無限」一遍又一遍。我有一個感覺,問題是我把一個哈希引用,$哈希,而不是索引,但我不知道如何獲得索引(以及我最初試圖做到這一點的方式(1st代碼段沒有提前工作)。
任何幫助,將不勝感激。
感謝。
爲什麼'%hash'?如果嚴格/警告需要它,這是一個進一步代碼下面的問題的跡象...... – 2013-03-25 06:50:08
'my%hash = undef;'不會做你認爲它的做法。它相當於'my%hash =(''=> undef);'。除了第一種形式會產生帶有「使用警告」的警告。 – 2013-03-25 17:23:42