在散列中添加值(Perl)

时间:2012-12-03 21:45:53

标签: perl hashtable

我想从我创建的哈希中添加值。

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.

我的哈希就像     核心价值     猫2     狗4     大鼠1

所以我正在尝试将所有值加起来以便我可以取平均值。

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

2 个答案:

答案 0 :(得分:21)

要使用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};

答案 1 :(得分:4)

如果你替换你应该没事:

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

使用:

$value_count += $words{key};