@numbers = (1,2,3,4,8,9,10,13,14,18,19,20,24); for(@numbers) { push @$range,$_ and next if $range and $_-$range->[-1]==1; push @ranges, ($range = [$_]); } $rangelist = join(',', map { @$_>2 ? "$_->[0]-$_->[-1]" : @$_ } @ranges ); print "($rangelist)";