Latest benchmark:
#!/usr/bin/env perl -slw
use strict;
use Benchmark qw[ cmpthese ];
use List::MoreUtils qw[ zip ];
sub zipA {
my( $str1, $str2 ) = @_;
$str1 =~ s/.\K/ substr $str2, 0, 1, ''/gesr;
}
sub zipB {
no warnings qw/ uninitialized /;
my( $a, $b ) = @_;
my @a1 = split( '', $a );
my @a2 = split( '', $b );
return join'', zip @a1, @a2;
}
sub zipC($$){
my( $n, $a, $b ) = ( 1, @_ );
substr( $a, $n, 0, $_), $n += 2 for split '', $b;
return $a;
};;
sub zipD {
my ($str1, $str2) = @_;
for (0 .. length $str2) {
substr $str1, $_ * 2 + 1, 0, substr $str2, $_, 1;
}
return $str1;
}
our $A = 'ABCDEFGHIJ';
our $B = 'abcde';
cmpthese -1, {
A => q[ my $zipped = zipA( $A, $B ); ],
B => q[ my $zipped = zipB( $A, $B ); ],
C => q[ my $zipped = zipC( $A, $B ); ],
D => q[ my $zipped = zipD( $A, $B ); ],
};
I ran it five times.
This seems to be the most representative:
Rate B A C D
B 91995/s -- -39% -66% -72%
A 151837/s 65% -- -45% -54%
C 274373/s 198% 81% -- -17%
D 330831/s 260% 118% 21% --
-
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.