Из документации DBI на cpan :
Общая проблема заключается в том, чтобы фрагмент кода обрабатывал значение, которое может быть определено или не определено (не NULL или NULL).) во время выполнения.Простой метод состоит в том, чтобы подготовить соответствующее утверждение по мере необходимости и заменить заполнитель для случаев, отличных от NULL:
$sql_clause = defined $age ? "age = ?" : "age IS NULL";
$sth = $dbh->prepare(qq{
SELECT fullname FROM people WHERE $sql_clause
});
$sth->execute(defined $age ? $age : ());
Это не совсем относится к вашему вопросу, который я предполагаю означает, что выполнение завершится неудачно, если вы добавите аргумент, который не ожидается.Итак, последняя строка здесь будет применяться:
$sth->execute(defined $name ? $name : ());