my ($min,$max,@newlist); @list = sort { $a <=> $b } @list; $min=$max=shift @list; while (@list) { $_= shift @list; if (not $_ == ++$max) { --$max; push @newlist, "$min-$max"; $min=$max=$_; } } push @newlist, "$min-$_" if (defined $_); print join(',',map {s/(\d+)-\1/$1/} @newlist);