use strict; use warnings; use Data::Dumper; my @a1 = ( 100, 204, 312 ); my @a2 = ( 102, 313, 409 ); my @a3 = ( 205, 206, 315 ); my @a4 = ( 207, 210, 314 ); ## Two contiguous sequences of 4 values: 204 .. 207 & 312 .. 315 my $arrayNo = -1; my @ints = sort {$a->[0] <=> $b->[0]} map { my $raOrig = $_; my @items = (); push @items, [$raOrig->[0]->[$_], qq{$raOrig->[1]:$_}] for 0 .. $#{$raOrig->[0]}; @items; } map { $arrayNo ++; [$_, $arrayNo] } \@a1, \@a2, \@a3, \@a4; my @sets; for my $window (0 .. $#ints - 3) { push @sets, [@ints[$window .. $window + 3]] if $ints[$window]->[0] == $ints[$window + 3]->[0] - 3; } print Dumper \@sets;