29.08.06, 03:18, A. Pagaltzis <[EMAIL PROTECTED]>:
> * Alexandre Jousset <[EMAIL PROTECTED]> [2006-08-28 22:55]:
> > It works only for integers...
> This list is “fun with Perl.” Splitting a string at the dot char
> is not very fun, no? I considered that part to be obvious.
and now, benchmarking:
# perl -MBenchmark=timethese -de0
DB<1> $a = "21285063.14"
DB<2> sub A () { local $_ = $a; 1 while s/^([-+]?\d+)(\d{3})/$1,$2/; return
$_; }
DB<3> sub B () { local $_ = $a;
s/(^[-+]?\d+?(?=(?>(?:\d{3})+)(?!\d))|\G\d{3}(?=\d))/$1,/g; return $_; }
DB<4> sub C () { my ($aa,$bb) = split "\\.",$a; return scalar (reverse join
' ', unpack '(A3)*', reverse $aa) . ".$bb"; }
DB<5> timethese (1_000_000,{'A' => \&A,'B' => \&B,'C' => \&C})
Benchmark: timing 1000000 iterations of A, B, C...
A: 27 wallclock secs (17.16 usr + 0.02 sys = 17.18 CPU) @ 58207.22/s
(n=1000000)
B: 21 wallclock secs (14.59 usr + 0.01 sys = 14.60 CPU) @ 68493.15/s
(n=1000000)
C: 6 wallclock secs ( 6.12 usr + -0.02 sys = 6.10 CPU) @ 163934.43/s
(n=1000000)
--
wbw, artur