use strict; use warnings; use List::Util 'sum'; use Data::Dumper; sub asBinary { sum map { 2**$_ } @_ } my @AoA = ( [ 2, 13, 3, 16 ], [ 10, 1, 11, 6 ], [ 0, 10, 11, 19 ], [ 6, 1, 19, 15 ], [ 17, 6, 18, 12 ], ); push @$_, asBinary( @$_ ) for @AoA; my $mask = asBinary( @{$AoA[0]}[0..3] ); my @good = grep { ~$mask & $_->[4] } @AoA; print Dumper \@good;