【发布时间】:2013-03-25 14:57:58
【问题描述】:
所以,我有一个哈希数组,@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,而不是一个索引,但我不知道如何获取索引(以及我最初尝试这样做的方式(第一个代码段不起作用)。
任何帮助将不胜感激。
提前致谢。
【问题讨论】:
-
为什么是
%hash?如果严格/警告需要它,则表明代码中存在问题... -
my %hash = undef;不会像您认为的那样做。它相当于my %hash = ( '' => undef );。除了第一种形式会产生带有use warnings;的警告。
标签: perl