给定一个数字字符串,我需要使用Perl尽快将所有数字相加。
我的第一种实现是使用unpack()解压缩数字,然后使用List::Utils的sum()函数对数字列表求和。这个方法非常快,但是否有更快的打包/解包方法来完成此任务呢?
我试过使用了pack/unpack组合,并对两种实现进行了基准测试。使用的CPU时间几乎相同;也许有我不知道的一些快速技巧吗?
以下是我如何进行基准测试的方法:
#!/usr/bin/env perl
use 5.012;
use strict;
use List::Util qw/sum/;
use Benchmark qw/timethese/;
timethese ( 1000000, {
list_util => sub {
my $CheckDigit = "999989989";
do {
$CheckDigit = sum( unpack( 'AAAAAAAAA', $CheckDigit ) );
} while ( $CheckDigit > 9 );
},
perl_only => sub {
my $CheckDigit = "999989989";
do {
$CheckDigit = unpack( '%16S*', pack( 'S9', unpack( 'AAAAAAAAA', $CheckDigit ) ) );
} while ( $CheckDigit > 9 );
},
} );