The shifting of elements from the array makes it empty after first iteration.
Ugh, I seem to be extra stupid today. But hey, it's not that easy still:
my @s = '0001' .. '1000';
cmpthese -1,{
d => q[ my @d = @s; ],
c => q[ my @c = @s; $c[ $_ ] += 0 for 0 .. $#c; ],
a => q[ my @a = @s; $_ += 0 for @a; ],
b => q[ my @b = @s; my @new; push @new, $_ + 0 while defined( $_ =
+ shift @b ) ],
};
Yields:
Rate c a b d
c 793688/s -- -59% -59% -84%
a 1941807/s 145% -- -0% -60%
b 1942492/s 145% 0% -- -60%
d 4812084/s 506% 148% 148% --
So what do we have, shifting and for (@list) are equally fast? Not so:
my @s = '0000001' .. '1000000';
cmpthese -1,{
d => q[ my @d = @s; ],
c => q[ my @c = @s; $c[ $_ ] += 0 for 0 .. $#c; ],
a => q[ my @a = @s; $_ += 0 for @a; ],
b => q[ my @b = @s; my @new; push @new, $_ + 0 while defined( $_ =
+ shift @b ) ],
};
Gives these results:
Rate c b a d
c 764586/s -- -58% -62% -85%
b 1803742/s 136% -- -10% -65%
a 2007409/s 163% 11% -- -61%
d 5119310/s 570% 184% 155% --
Which is logical, at last. Scandal of the century is averted, I stand corrected - the only thing I have to find out is why
my tests on actual data consistently show shifting to be faster than for (@list). Not several orders of magnitude faster as it was in that faulty benchmark but considerably so. I believe I have to look for an error...
Regards,
Alex.
-
Are you posting in the right place? Check out Where do I post X? to know for sure.
-
Posts may use any of the Perl Monks Approved HTML tags. Currently these include the following:
<code> <a> <b> <big>
<blockquote> <br /> <dd>
<dl> <dt> <em> <font>
<h1> <h2> <h3> <h4>
<h5> <h6> <hr /> <i>
<li> <nbsp> <ol> <p>
<small> <strike> <strong>
<sub> <sup> <table>
<td> <th> <tr> <tt>
<u> <ul>
-
Snippets of code should be wrapped in
<code> tags not
<pre> tags. In fact, <pre>
tags should generally be avoided. If they must
be used, extreme care should be
taken to ensure that their contents do not
have long lines (<70 chars), in order to prevent
horizontal scrolling (and possible janitor
intervention).
-
Want more info? How to link
or How to display code and escape characters
are good places to start.