c:\@Work\Perl\monks>perl -wMstrict -le "my $s = join q{,}, 1 .. 40_000; ;; $s =~ s{ \b (\d+) (?{ $1 }) \K (?: , (\d+) \b (??{ ++$^R != $2 || length($1) != length($2) }))+ }{-$2}xmsg; print qq{'$s'}; " '1-9,10-99,100-999,1000-9999,10000-40000' c:\@Work\Perl\monks>perl -wMstrict -le "my $s = join q{,}, 1 .. 150_000; ;; $s =~ s{ \b (\d+) (?{ $1 }) \K (?: , (\d+) \b (??{ ++$^R != $2 || length($1) != length($2) }))+ }{-$2}xmsg; print qq{'$s'}; " Complex regular subexpression recursion limit (32766) exceeded at -e line 1. Complex regular subexpression recursion limit (32766) exceeded at -e line 1. Complex regular subexpression recursion limit (32766) exceeded at -e line 1. '1-9,10-99,100-999,1000-9999,10000-42767,42768-75535,75536-99999,100000-132767,132768-150000' c:\@Work\Perl\monks>perl -wMstrict -le "my $s = join q{,}, 1 .. 150_000; ;; $s =~ s{ \b (\d+) (?{ $1 }) \K (?: (?: , (\d+) \b (??{ ++$^R != $2 || length($1) != length($2) })){1,30000} )+ }{-$2}xmsg; print qq{'$s'}; " '1-9,10-99,100-999,1000-9999,10000-99999,100000-150000'