On Tue, May 31, 2011 at 22:41, Nick Patch <[email protected]> wrote:
> use Benchmark qw( cmpthese );
>
> cmpthese(-2, {
> assign => sub { my $x = 'bar'; $x = "foo/$x" },
> substr => sub { my $x = 'bar'; substr $x, 0, 0, 'foo/' },
> lvalue => sub { my $x = 'bar'; substr($x, 0, 0) = 'foo/' },
> });
Oddly(?) join() is 20% faster than assignment:
...
join => sub { my $x = 'bar'; $x = join('/', 'foo', 'bar') },
oooscf => sub { my $x = 'bar'; $x = File::Spec->catfile($x, 'bar') },
fnoscf => sub { my $x = 'bar'; $x = catfile($x, 'bar') },
Rate fnoscf oooscf lvalue assign join substr
fnoscf 146161/s -- -6% -94% -95% -96% -97%
oooscf 155614/s 6% -- -93% -95% -96% -97%
lvalue 2307768/s 1479% 1383% -- -28% -41% -59%
assign 3190698/s 2083% 1950% 38% -- -18% -43%
join 3912592/s 2577% 2414% 70% 23% -- -30%
substr 5609155/s 3738% 3505% 143% 76% 43% --
FWIW, TIMTOWTDI :-)
#!/usr/bin/python
from timeit import Timer
import os
ways = (
'x = "bar"; x = "foo/" + x',
'x = "bar"; x = "foo/%s" % x',
'x = "bar"; x = "/".join(("foo", x))',
'x = "bar"; x = "foo/{0}".format(x)',
'x = "bar"; x = os.path.join("foo", x)',
'x = "bar"; x = list(x); x[0:0] = "foo/"; x = "".join(x)',
)
for way in ways:
print '%-60s: %.3f usec/pass' % (
way, Timer(way, 'import os').timeit(number=10000000)/10)
x = "bar"; x = "foo/" + x : 0.092 usec/pass
x = "bar"; x = "foo/%s" % x : 0.165 usec/pass
x = "bar"; x = "/".join(("foo", x)) : 0.209 usec/pass
x = "bar"; x = "foo/{0}".format(x) : 0.273 usec/pass
x = "bar"; x = os.path.join("foo", x) : 1.088 usec/pass
x = "bar"; x = list(x); x[0:0] = "foo/"; x = "".join(x) : 2.019 usec/pass
Paul
_______________________________________________
Boston-pm mailing list
[email protected]
http://mail.pm.org/mailman/listinfo/boston-pm