Вы не показываете, где назначено $dbh
. Предположительно, вы делаете это раньше. Если вы этого не сделаете, то я умоляю вас добавить эти две строчки ко всем вашим кодовым файлам:
use strict;
use warnings;
... и они спасут вас от мира боли.
Ранее, когда вы создаете дескриптор базы данных, вы должны проверить, случилось ли что-то плохое:
my $dbh = DBI->connect($data_source, $username, $password)
or die $DBI::errstr;
Нет смысла продолжать работу с вашей программой, если вы не можете получить дескриптор db, не так ли? Если вы не умрете, вы должны по крайней мере вернуться из этой функции / метода / области кода, которая отвечает за обработку БД.
Существуют и другие проблемы с вашим кодом, такие как повсеместное использование блоков eval {}
и вызов функций с &
, но это было достаточно подробно рассмотрено в предыдущих вопросах на этом сайте, поэтому я рекомендую вам выполнить поиск.