Это невозможно сделать без изменения запроса, поскольку вы не можете сравнить что-либо с NULL, используя '=', а undef равен NULL; вам нужно использовать 'is null' или 'not null'. Ищите «NULL-значения» в DBI , и это объяснит.
Редакция после комментариев:
Если я правильно понимаю проблему сейчас, вы можете выбрать все строки или конкретные строки в зависимости от того, является ли скаляр Perl неопределенным или нет. Решение будет:
my $sql = q/select something from table where ? is null or column = ?/;
$s->prepare($sql);
# here $param is undef for all rows and !undef for specific rows
$s->execute($param, $param);