#!/usr/bin/perl use Benchmark qw( cmpthese ); my( $count, $len )= @ARGV; $count ||= 10; $len ||= 5000; my $string= join '+', map { join '', map {('a'..'z')[rand(26)]} 0..rand($len) } 1..$count; sub subst { $string =~ s/\+/-/g; $string =~ s/\-/+/g; 0; } sub trans { $string =~ tr/\+/-/; $string =~ tr/\-/+/; 0; } cmpthese( -3, { a_s => \&subst, b_s => \&subst, a_t => \&trans, b_t => \&trans, } ); #### Rate b_t a_t b_s a_s b_t 8190/s -- -1% -40% -40% a_t 8258/s 1% -- -39% -40% b_s 13615/s 66% 65% -- -1% a_s 13720/s 68% 66% 1% --