perl -Mstrict -Mwarnings -le 'my %g = ( 1 => 1, 2 => 2, 3 => 2, 4 => 2, 6 => 1, 7 => 1, 8 => 1, 12 => 1, ); my @h = sort { $a <=> $b } keys %g; my $sv; my $ev; while ( scalar @h ) { my $v = shift @h; if ( ! defined $sv ) { $sv = $v; } if ( ! defined $ev ) { $ev = $v; } my $i = 1; while ( scalar @h and $h[0] == $sv + $i ) { $i++; $ev = shift @h; } if ( $sv == $ev ) { print $sv; } else { print $sv, q{ - }, $ev; } $sv = undef; $ev = undef; }'