В общем, я не уверен, почему люди так боятся исключений. Вы ловите их и идете дальше.
my $sth = prepare ...
$sth->execute;
my $result = eval { $sth->fetchrow_arrayref->[1] };
if($result){ say "OH HAI. YOU HAVE A RESULT." }
else { say "0 row(s) returned." }
В этом случае, однако, ответ Пола самый лучший.
Кроме того, $sth->rows
обычно не работает, пока вы не загрузите все строки. Если вы хотите узнать, сколько строк соответствует, то вам нужно задать движку базы данных вопрос, на который вы хотите знать ответ; а именно select count(1) from foo where bar='baz'
.