c:\@Work\Perl\monks>perl -wMstrict -le "use 5.010; ;; print qq{perl version $]}; ;; my $s = join q{,}, 1 .. 1_500_000; ;; my $end_point = qr{ , (\d++) \b (??{ ++$^R != $2 || length($1) != length($2) }) }xms; ;; my $start = time; use re 'eval'; $s =~ s{ \b (\d++) (?{ $1 }) \K (?: $end_point{1,32766})+ }{-$2}xmsg; print qq{'$s'}; printf qq{in %d seconds \n}, time - $start; " perl version 5.010001 '1-9,10-99,100-999,1000-9999,10000-99999,100000-999999,1000000-1500000' in 18 seconds