ROW: foreach my $row (@$list) { for my $i (0 .. $#vals) { unless ($vals[$i] && $row->[$i+1] && String::Approx::amatch($row->[$i+1], $vals[$i])) { next ROW; } } # All succesful! return $row->[0]; } # Boohoo... no match. return;