代码
sub sumfunc {
my (@x) = @_; my $sum = 0;
for(my $i=0; $i<=$#x; $i++) {
$sum += $x[$i];
}
return $sum;
}
使用
my $Sx = sumfunc(@x);
你怎么能更好地做sumfunc? Perl 5.18.2中此事件的任何默认函数? 总结@x中的所有内容。 我觉得一个单独的功能无关紧要。
答案 0 :(得分:4)
快速搜索显示,对列表求和的函数为sum
,可从标准模块List::Util获取。
文档synopsis表明,必须声明所需的功能。例如,
use strict;
use warnings;
use List::Util qw(sum);
my @a = qw(1 3 5 7 9);
my $b = sum @a;
print "b=$b.\n";
相同的文档树允许搜索特定于Perl 5.18.2的文件;该功能在那里仍然可用。
答案 1 :(得分:1)
我总是尽量保持模块列表和其他外部依赖关系尽可能低。这也有效:
use strict;
use warnings;
my @a = qw(1 3 5 7 9);
my $b = 0;
map {$b += $_} @a;
print "b=$b.\n";
map
为列表中的每个元素执行块,并依次为每个元素设置$_
。
你也可以使用grep
,区别在于map
返回表达式的每个结果的列表(在这种情况下是(1,4,9,16,25)),并且grep
返回表达式求值为true的元素列表,在本例中为(1,3,5,7,9);如果输入列表中的第一个元素为零,则不会返回,或者如果第二个元素为-1,它也会导致0值表达式,因此不会返回。但是在这种情况下,差异是无关紧要的。