my (%db_lookup, %in_lookup); @db_lookup{@db} = (); @in_lookup{@in} = (); if ($condition1) { # Dunno what your test conditions are, so... @db = grep { not exists $in_lookup{$_} } @db; } elsif ($condition2) { push @db, grep { not exists $db_lookup{$_} } @in; }