use warnings; use strict; print ranges(2,3,4,10,11,12), "\n"; sub ranges { my @vals = @_; my $min = $vals[0]; my $max; my @list; for my $i (0 .. (scalar(@vals)-2)) { if (($vals[$i+1] - $vals[$i]) != 1) { $max = $vals[$i]; push @list, ($min == $max) ? $min : "$min-$max"; $min = $vals[$i+1]; } } $max = $vals[-1]; push @list, ($min == $max) ? $min : "$min-$max"; return join ', ', @list; } __END__ 2-4, 10-12