默认情况下Perl中的任何sumfunc

时间:2015-05-03 12:15:32

标签: perl optimization

代码

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中的所有内容。 我觉得一个单独的功能无关紧要。

2 个答案:

答案 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值表达式,因此不会返回。但是在这种情况下,差异是无关紧要的。