Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在散列中添加值(Perl)_Perl_Hashtable - Fatal编程技术网

在散列中添加值(Perl)

在散列中添加值(Perl),perl,hashtable,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 1

我想把我创建的散列中的值相加

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.
C:/Users/Clayton/workspace/main/main.pl第54行,第174行调用了未定义的子例程&main::sum。
我真的不确定我在这里哪里出了问题。我是Perl新手

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

Use of uninitialized value in addition (+) at C:/Users/Clayton/workspace/main/Main.pl line 54, <$filehandle1> line 174.
在C:/Users/Clayton/workspace/main/main.pl第54行,第174行使用未初始化的值。
我的杂烩很像 关键值 第2类 狗4 鼠1

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


编辑2:实际修复是在我需要的注释中,以使我的$value\u count=0。一切都解决了。谢谢大家。我认为这是一个需要解决的重要问题,我认为它可能对其他人有用,所以我将离开它

要使用
sum
函数,您需要软件包。但是在这种情况下不需要这样做,因为您可以使用
+
操作符:

$value_count = $value_count + $words{$key};
# or $value_count += $words{$key};
事实上,您可以使用
sum
并避免循环。这是您应该使用的解决方案:

use List::Util 'sum';
my $value_count = sum values %words;
values
函数将哈希值作为列表返回,并对该列表求和。如果不想对所有键求和,请使用哈希切片:

use List::Util 'sum';
my $value_count = sum @words{@keys};

如果您更换了以下部件,您应该不会有问题:

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


您是否用
而不是
$key
修复了打字错误?请确保您使用的是“$”符号。你不在你的例子中。@Tim N啊,该死的,我确实有一个打字错误…@KirsKringle,那是因为它没有定义;用
my$value\u count=0对其进行初始化。顺便说一句,如果您想知道:
$value\u count=0
,那么使用警告(警告)就太好了,因为问题并不是真正的问题。这只会导致发出警告。打字错误和
sum
是实际问题。我认为使用
value
可能比哈希片更简单:
perl-MList::Util=sum-le'%h=(一=>1,十=>10,六=>6);打印求和(值%h)
@Ashley是,但这仅在您要求和所有值时有效。不清楚OP是要求和所有值还是仅求和一个子集。最佳解决方案可能是求和值
或哈希切片,具体取决于此。
$value_count += $words{key};