Upper case data
===============
Rate with_tr old_way
with_tr 183850/s -- -32%
old_way 272269/s 48% --
Lower case data
===============
Rate with_tr old_way
with_tr 182262/s -- -33%
old_way 270854/s 49% --
####
#!/usr/bin/perl
use strict;
use warnings;
use Benchmark qw( cmpthese );
my $TIMES = shift(@ARGV) || -3;
my $upper_id_string = "ABCD1EFGHI2J.a01f2345b067cde890f12gab345678c9";
my $lower_id_string = "abcd1efghi2j.a01f2345b067cde890f12gab345678c9";
sub old_way {
my $string = shift;
return split( /\./, $string, 2 );
}
sub with_tr {
my $string = shift;
my( $id, $session ) = split( /\./, $string, 2 );
$id =~ tr/a-z/A-Z/;
return ( $id, $session );
}
{
print("Upper case data\n");
print("===============\n");
our $string = $upper_id_string;
cmpthese($TIMES, {
old_way => 'use strict; use warnings; our $string; my @rv = old_way($string); 1',
with_tr => 'use strict; use warnings; our $string; my @rv = with_tr($string); 1',
}),
}
print("\n");
{
print("Lower case data\n");
print("===============\n");
our $string = $lower_id_string;
cmpthese($TIMES, {
old_way => 'use strict; use warnings; our $string; my @rv = old_way($string); 1',
with_tr => 'use strict; use warnings; our $string; my @rv = with_tr($string); 1',
});
}
##
##
Rate with_tr old_way with_tr_i old_way_i
with_tr 180473/s -- -32% -39% -52%
old_way 265506/s 47% -- -10% -29%
with_tr_i 296058/s 64% 12% -- -20%
old_way_i 372377/s 106% 40% 26% --
##
##
...
my $old_way_inline = <<'__EOI__';
my @rv = split( /\./, $string, 2 );
__EOI__
my $with_tr_inline = <<'__EOI__';
my( $id, $session ) = split( /\./, $string, 2 );
$id =~ tr/a-z/A-Z/;
my @rv = ( $id, $session );
__EOI__
{
our $string = $upper_id_string;
cmpthese($TIMES, {
old_way => 'use strict; use warnings; our $string; my @rv = old_way($string); 1;',
with_tr => 'use strict; use warnings; our $string; my @rv = with_tr($string); 1;',
old_way_i => 'use strict; use warnings; our $string; ' . $old_way_inline . ' 1;',
with_tr_i => 'use strict; use warnings; our $string; ' . $with_tr_inline . ' 1;',
}),
}