Off the top of my head:
use Benchmark qw/cmpthese/; my $append = 'B' x 50; cmpthese (100, { dot => sub { my $c = 'A' x 50; $c = $c . $append f +or 1..1e5; }, dot_eq => sub { my $c = 'A' x 50; $c .= $append f +or 1..1e5; }, substr => sub { my $c = 'A' x 50; substr $c, length $c, 0, $append f +or 1..1e5; }, }); __END__ Rate substr dot dot_eq substr 16.5/s -- -35% -37% dot 25.5/s 55% -- -2% dot_eq 26.0/s 58% 2% --
Update: Erm, had to put the 1e5 inside each sub to reduce the overhead of the my declaration.
Update2: After playing with it for a while, I find interesting what happens when $append has a size that is a power of 2. Size of $c doesn't matter:
use Benchmark qw/cmpthese/; my $append = 'B' x 256; cmpthese (100, { dot => sub { my $c = 'A' x 50; $c = $c . $append f +or 1..1e5; }, dot_eq => sub { my $c = 'A' x 50; $c .= $append f +or 1..1e5; }, substr => sub { my $c = 'A' x 50; substr $c, length $c, 0, $append f +or 1..1e5; }, }); __END__ Rate substr dot_eq dot substr 6.99/s -- -35% -49% dot_eq 10.7/s 53% -- -21% dot 13.6/s 95% 27% --
Size of $c doesn't matter. So if you are working with 8 Kb chunks, you better use $data = $data . $more.
--
David Serrano
In reply to Re: simply appending to a scalar...
by Hue-Bond
in thread simply appending to a scalar...
by abachus
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |