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'
####
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
####
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++)
(?(?{ ++$^R != $2 || length($1) != length($2) }) (*F))
}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 3 seconds