in reply to Premature and micro optimization...

How very odd!

My testing on Win2k, ActivePerl 5.8.8 shows that the case of the data doesn't affect the timing, and that old_way is consistently just shy of 50% faster than with_tr.

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% --

Benchmark code:

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

Of course, inlining the code saves a lot of time:

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% --

Benchmark code: