use strict; use warnings; my @list = sort {$a <=> $b} (1, 2, 3, 5, 9, 10, 13, 22, 20, 19, 15, 21, 33); printf "%s\n", join(",", @list); my @newList; my $min = my $max = shift @list; for(@list, -1) { if($_ == ($max + 1)) { $max++ } else { if($min == $max) { push @newList, $min } else { push @newList, "$min-$max" } $min = $max = $_; } } printf "%s\n", join(",", @newList);