use warnings; use strict; my @input = (-1, 1, 2, 3, 5, 6, 8, 10, 11, 12, 13 ); my @ranges = ( [ $input[0] ] ); for (@input[1..$#input]) { if( $_ == $ranges[-1][-1]+1 ) { $ranges[-1][1] = $_; } else { push @ranges, [ $_ ]; } } $" = ":"; print "@$_\n" for @ranges;