if (length($str) > 1000) { substr($str, 1+rindex($str, '.', 1000)) = ""; } #### #!/usr/bin/perl use Benchmark 'cmpthese'; use String::Index 'crindex'; my $str = "alphabet. alphabet! alphabet? " x 100; cmpthese(-5, { rcindex => sub { my $x = $str; substr($x, 1+crindex($str, ".!?", 1000)) = ""; }, regex => sub { my $x = $str; $x =~ s/^(.{1,999}[.!?]).*/$1/; }, rxsubstr => sub { my $x = $str; $x =~ /^.{1,999}[.!?]/ and substr($x, $+[0]) = ""; }, }); __END__ Rate regex rxsubstr rcindex regex 42520/s -- -43% -66% rxsubstr 75202/s 77% -- -40% rcindex 125559/s 195% 67% --