Не очень хорошая идея отлавливать и игнорировать ошибки, независимо от того, являются ли они фатальными или нет.Кроме того, не рекомендуется проверять $ @ так, как вы это делаете (см. Вопросы на этом сайте об исключениях perl, чтобы найти лучшие способы перехвата исключений; ниже я использую Try :: Tiny ,возможно, самый легкий маршрут из всех).
Вместо продолжения операции DBI, когда более ранняя операция могла быть неудачной, вы должны проверять условия ошибок на каждом этапе:
use strict; use warnings;
use Try::Tiny;
try {
my $sth = $dbh->prepare($sql) or die $dbh->errstr;
$sth->execute or die $sth->errstr;
} catch {
print "got error $_\n";
# return from function, or do something else to handle error
};
помните, всегда use strict; use warnings;
в каждом модуле и скрипте.Ваш отрывок кода предполагает, что вы еще этого не делаете.