#! /usr/bin/perl use warnings; use strict; use Benchmark qw{ cmpthese }; my $orig = 'Just another Perl hacker,' x 100; my $str = $orig; my $char = 'r'; my $q = quotemeta $char; sub transliteration { my $count = eval "\$str =~ tr/$q//" } sub length_subst { my $count = length( $str =~ s/[^$q]//rg ) } sub subst { my $count = $str =~ s/$q/$char/g } transliteration() eq length_subst() or die 'Different t-ls'; transliteration() eq subst() or die 'Different t-s'; $orig eq $str or die 'Changed'; cmpthese(-3, { transliteration => \&transliteration, length_subst => \&length_subst, subst => \&subst, }); __END__ Rate length_subst subst transliteration length_subst 2833/s -- -91% -97% subst 30244/s 968% -- -70% transliteration 102423/s 3515% 239% --