だから、私はハッシュの配列@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と$wordを保存しました)。
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";
}
「私は無限に行く」を何度も何度も印刷してしまいます。問題は、インデックスの代わりにハッシュ参照$ hashを入れていることだと感じていますが、インデックスを取得する方法(および最初にこれを実行しようとした方法(1回目)がわかりません。コードセグメントが機能しませんでした)。
どんな助けでも大歓迎です。
前もって感謝します。