$ perl -Mstrict -Mwarnings -le ' my @vlans = (2, 3, 4, 7, 10, 11, 12, 20); my $last = $vlans[0] - 2; my @ranges; push @{$ranges[$#ranges + ($_ - $last > 1)]}, $last = $_ for @vlans; print join ",", map { $_->[0] == $_->[-1] ? $_->[0] : join "-", @{$_}[0, -1] } @ranges; ' 2-4,7,10-12,20