my @a = ( [2,5,10,5,12,6,21,5,10,12,23], [5,6,11,10,5,10,6,21,5,1,9], [6,5,10,15,21] ); my($m, $n) = (2, 2); my $joined = join ';', map join(',', @$_), @a; while ($joined =~ / \b (?= ( @{[ join ',', ('\d+') x $n ]} ) \b @{[ '(?> .*? \b \1 \b )' x ($m - 1) ]} ) /xg) { print "($1)\n" unless $seen{$1}++; }