1行スクリプトでの結果が以下。
$ time perl -le 'for(1..10000000){$s="";$s.="Fizz" if !($_%3);$s.="Bizz" if !($_%5);$s=$_ if !$s;print $s}' | tail
9999991
9999992
Fizz
9999994
Bizz
Fizz
9999997
9999998
Fizz
Bizz
real 0m18.600s
user 0m18.269s
sys 0m0.252s
ルックアップテーブルを使った場合の結果が以下。ルックアップテーブルのおかげでmod計算の回数は減っているけど、総時間は増える。
$ cat fizz_buzz.pl
#!/usr/bin/perl -l
use strict;
use warnings;
my @s = ('FizzBizz', '', '', 'Fizz', '', 'Buzz', 'Fizz', '', '', 'Fizz', 'Buzz', '', 'Fizz', '', '', '');
my $n = 0;
for (0..10000000) {
my $s = $s[$_ % 15];
print $s?$s:$n;
$n++;
}
$ time perl fizz_buzz.pl | tail
9999991
9999992
Fizz
9999994
Buzz
Fizz
9999997
9999998
Fizz
Buzz
real 0m25.117s
user 0m24.918s
sys 0m0.196s