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;', }), }