my @sets = ... # after values are loaded into the @sets AoA, build a map: my @boolmap; for my $set ( 0 .. $#sets ) { $boolmap[ $_ ]{ $set } = undef for ( @{ $sets[ $set ] } ); } # now, as changes are made to bools, check just the relevant sets: for my $next ( @someOrder ) { $bools[ $next ]++; for my $set ( keys %{ $boolmap[ $next ] } ) { if( defined( $sets[ $set ] ) and grep( { $bools[ $_ ] } @{ $sets[ $set ] } ) == @{ $sets[ $set ] } ) { $sets[ $set ] = undef; } } }