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:

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:

... 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 = ol +d_way($string); 1;', with_tr => 'use strict; use warnings; our $string; my @rv = wi +th_tr($string); 1;', old_way_i => 'use strict; use warnings; our $string; ' . $old_wa +y_inline . ' 1;', with_tr_i => 'use strict; use warnings; our $string; ' . $with_t +r_inline . ' 1;', }), }