#! 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;
};;
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 ); ],
};
__END__
C:\test>\perl5.18\perl\bin\perl.exe 1133857.pl
Rate B A C
B 43932/s -- -48% -72%
A 84167/s 92% -- -47%
C 159444/s 263% 89% --
|