8

我想将我创建的哈希值相加。

my $value_count;
foreach my $key (@keys) {
    $value_count = sum($words{key}, $value_count);
}

但是,当我运行它时,我得到

Undefined subroutine &main::sum called at C:/Users/Clayton/workspace/main/Main.pl line 54, <$filehandle1> line 174.

我不确定我在哪里出错了。我是 Perl 的新手。

编辑: 我尝试仅使用 + 运算符,但出现错误

Use of uninitialized value in addition (+) at C:/Users/Clayton/workspace/main/Main.pl line 54, <$filehandle1> line 174.

几乎我的哈希就像 Key Value cat 2 dog 4 rat 1

所以我试图把所有的值加起来,这样我就可以取一个平均值。

编辑 2: 实际的修复是在我需要使我的 $value_count = 0 的评论中。这修复了一切。谢谢你们。我认为这是一个需要解决的重要问题,我认为它可能对其他人有用,所以我将离开它。

4

2 回答 2

22

要使用该sum功能,您需要List::Util软件包。但在这种情况下不需要这样做,因为您可以使用+运算符:

$value_count = $value_count + $words{$key};
# or $value_count += $words{$key};

事实上,您可以使用sum并避免循环。这是您应该使用的解决方案:

use List::Util 'sum';
my $value_count = sum values %words;

values函数将哈希值作为列表返回,并将sum该列表相加。如果您不想对所有键求和,请使用哈希切片:

use List::Util 'sum';
my $value_count = sum @words{@keys};
于 2012-12-03T21:46:44.273 回答
4

如果你更换你应该没问题:

$value_count = sum($words{key}, $value_count);

和:

$value_count += $words{key};
于 2012-12-03T21:48:24.823 回答