給定一串數字,我必須使用Perl儘可能快地總和所有數字。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);
},
});
也許[Inline :: C](http://p3rl.org/Inline::C-Cookbook) ?您可以使用SvIV宏將Perl標量變量轉換爲C int。 – daxim 2011-06-15 09:51:26
我總是在這種情況下思考C(和Inline :: C),但是非常謙虛,我認爲List :: Util sum()是迄今爲止最快的實現。 – 2011-06-15 10:35:00