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

Reply via email to