my $string = "abababa"; $string = reverse $string; $string =~ s/b/x/; $string = reverse $string; print $string,$/; #### my $string = "abababa"; my $ri = rindex( $string, 'b' ); substr( $string, $ri, 1) = 'x'; print $string,$/; #### use Benchmark 'cmpthese'; my $sref = { neglook => sub { my $string = "abababa"; $string =~ s/(b)(?!.*b)/x/; return; }, rindex => sub { my $string = "abababa"; my $ri = rindex( $string, 'b' ); substr( $string, $ri, 1) = 'x'; return; }, sexeger => sub { my $string = "abababa"; $string = reverse $string; $string =~ s/b/x/; $string = reverse $string; return; }, }; cmpthese( 3_000_000, $sref ); __END__ perl5.8.4 Rate neglook rindex sexeger neglook 523195/s -- -21% -36% rindex 659776/s 26% -- -19% sexeger 813670/s 56% 23% -- perl5.6.2 Rate neglook rindex sexeger neglook 719252/s -- -19% -20% rindex 888889/s 24% -- -1% sexeger 901442/s 25% 1% -- #### use Benchmark 'cmpthese'; use strict; use warnings; my $sref = { neglook => sub { my $string = "abababa"; $string =~ s/(b)(?!.*b)/x/; return; }, neganch => sub { my $string = "abababa"; $string =~ s/(b)(?!.*b)$/x/; return; }, rindex => sub { my $string = "abababa"; my $ri = rindex( $string, 'b' ); substr( $string, $ri, 1) = 'x'; return; }, sxedni => sub { my $string = "abababa"; $string = reverse $string; my $ri = index( $string, 'b' ); substr( $string, $ri, 1) = 'x'; $string = reverse $string; return; }, sexeger => sub { my $string = "abababa"; $string = reverse $string; $string =~ s/b/x/; $string = reverse $string; return; }, }; $|=1; print "Revving up my CPU"; for( 1 .. 3 ){ my $foo = 0; $foo++ for 1 .. 3_000_000; $foo-- for 1 .. 3_000_000; print '.'; } print "\n"; cmpthese( 3_000_000, $sref ); __END__ perl5.8.4 Rate sxedni neglook rindex sexeger neganch sxedni 505221/s -- -6% -26% -39% -79% neglook 534855/s 6% -- -22% -35% -77% rindex 685714/s 36% 28% -- -17% -71% sexeger 824176/s 63% 54% 20% -- -65% neganch 2369668/s 369% 343% 246% 188% -- perl5.6.2 Rate sxedni neglook rindex sexeger neganch sxedni 596303/s -- -17% -33% -33% -80% neglook 716503/s 20% -- -19% -19% -76% rindex 884695/s 48% 23% -- 0% -71% sexeger 884695/s 48% 23% 0% -- -71% neganch 3003003/s 404% 319% 239% 239% --