use Benchmark 'cmpthese'; my $str = "alphabet X alphabet" x 100 . "junk at the end" x 10; cmpthese(-5, { last => sub { my $x = $str; $x =~ s/([A-Z])[^A-Z]*$/$1/ }, capt_repl => sub { my $x = $str; $x =~ s/(.*[A-Z]).*/$1/ }, rx_rx => sub { my $x = $str; $x =~ /.*[A-Z]/g and $x =~ s/\G.*// }, sexeger => sub { my $x = $str; ($x = reverse $x) =~ s/^[^A-Z]+//; $x = reverse $x; }, }); print "-------------- now a short one --------------------------------\n"; $str = "a very short one"; cmpthese(-5, { last => sub { my $x = $str; $x =~ s/([A-Z])[^A-Z]*$/$1/ }, capt_repl => sub { my $x = $str; $x =~ s/(.*[A-Z]).*/$1/ }, rx_rx => sub { my $x = $str; $x =~ /.*[A-Z]/g and $x =~ s/\G.*// }, sexeger => sub { my $x = $str; ($x = reverse $x) =~ s/^[^A-Z]+//; $x = reverse $x; }, }); __END__ [16:10] Rate last sexeger capt_repl rx_rx [16:10] last 4329/s -- -78% -82% -86% [16:10] sexeger 19386/s 348% -- -19% -37% [16:10] capt_repl 23859/s 451% 23% -- -22% [16:10] rx_rx 30778/s 611% 59% 29% -- [16:10] -------------- now a short one -------------------------------- [16:10] Rate sexeger capt_repl rx_rx last [16:10] sexeger 261969/s -- -4% -6% -70% [16:10] capt_repl 271691/s 4% -- -3% -68% [16:10] rx_rx 279271/s 7% 3% -- -67% [16:10] last 859023/s 228% 216% 208% --