我想从我创建的哈希中添加值.
my $value_count;
foreach my $key (@keys) {
$value_count = sum($words{key}, $value_count);
}
Run Code Online (Sandbox Code Playgroud)
但是,当我运行这个时,我得到了
Undefined subroutine &main::sum called at C:/Users/Clayton/workspace/main/Main.pl line 54, <$filehandle1> line 174.
Run Code Online (Sandbox Code Playgroud)
我不确定我在哪里错了.我是Perl的新手.
编辑: 我尝试使用+运算符但我得到错误
Use of uninitialized value in addition (+) at C:/Users/Clayton/workspace/main/Main.pl line 54, <$filehandle1> line 174.
Run Code Online (Sandbox Code Playgroud)
几乎我的哈希就像Key Value cat 2 dog 4 rat 1
所以我正在尝试将所有值加起来,以便我可以取平均值.
编辑2: 实际的修复是在我需要使我的$ value_count = 0的评论中.这修复了一切.谢谢你们.我认为这是一个需要解决的重要问题,我认为这对其他人有用,所以我要离开它.
Tim*_*Tim 21
要使用该sum功能,您需要List::Util包.但在这种情况下不需要,因为您可以使用+运算符:
$value_count = $value_count + $words{$key};
# or $value_count += $words{$key};
Run Code Online (Sandbox Code Playgroud)
实际上,您可以使用sum并避免循环.这是您应该使用的解决方案:
use List::Util 'sum';
my $value_count = sum values %words;
Run Code Online (Sandbox Code Playgroud)
该values函数将散列值作为列表返回,并sum对该列表求和.如果您不想对所有键求和,请使用哈希切片:
use List::Util 'sum';
my $value_count = sum @words{@keys};
Run Code Online (Sandbox Code Playgroud)