my %neighbours; for (my $i = 0; $i < @domain1; $i++) { push @{$neighbours{$domain[$i]}}, $neighbours{$domain[$i-1]} if $i > 0; push @{$neighbours{$domain[$i]}}, $neighbours{$domain[$i+1]} if $i < $#domain1; } my @neighbours = map {@$_} @neighbours{map {/(.*)/; $1} };