Ваш способ выявления ошибок очень, очень старомоден. Если происходит что-то исключительное, почему бы не создать правильное исключение? Похоже, вы смоделировали обработку ошибок после модуля DBI
. Обратите внимание, что DBI
также имеет опцию RaiseError
. Использование этого почти всегда более разумно, чем использование устаревшей версии errorstr
. К сожалению, DBI больше не может изменять настройки по умолчанию, но для нового кода я не вижу смысла копировать эту ошибочную идею.
Вы также создаете соединение DBI в своем коде на основе параметров, предоставленных пользователем извне. У вас есть веская причина для этого? Разрешение пользователю передать значение DBI::dh
, которое он сконструировал сам, будет более гибким. Да, это требует немного больше кода снаружи, чтобы настроить объекты и соединить их вместе, но это также приведет к более чистому дизайну. Если подключение ваших объектов слишком вас беспокоит, вы, возможно, захотите взглянуть на Bread::Board
, чтобы выполнить подключение за вас, вместо того чтобы идти на компромисс с дизайном вашего модуля.
Кроме того, я повторяю предложение Эфира об использовании DBIx::Connector
. Управление дескрипторами базы данных действительно требует больших усилий, что может привести к ошибкам.