Другой способ - захватывать ошибки с помощью обработчика ошибок, делать с ними все, что вам нужно (отправить его в файл журнала, распечатать, умереть или продолжить выполнение скрипта).
Это исключает необходимость " or die() "
после каждого метода. Документацию о HandleError методе можно найти здесь .
Для начала возьмем простой пример:
#!/usr/bin/perl
use strict;
use warnings;
use DBI;
my $DB_name = 'database';
my $DB_user = 'root';
my $DB_pwd = '';
my $dsn = 'dbi:mysql:avm:localhost:3306';
my ($sth, $id, $name);
my $dbh = DBI->connect($dsn,$DB_user,$DB_pwd, { PrintError => 0, ShowErrorStatement => 1, HandleError => \&dbi_error_handler,} );
$sth = $dbh->prepare("SELECT * FROM tblmanufacturer");
$sth->execute();
while ( ($id,$name) = $sth->fetchrow_array() )
{
print "$id\t\t $name \n";
}
$sth->finish();
$dbh->disconnect();
sub dbi_error_handler
{
my( $message, $handle, $first_value ) = @_;
# print to your log file, call your own logger etc ...
# here it will die() to be similar to "or die()" method, but the line number is incorect
die($message);
# if you return false it will check/execute RaiseError and PrintError
return 1;
}
P.S. Нет смысла заключать здесь строковые переменные в кавычках: ($dsn,"$DB_user","$DB_pwd");
, не делайте этого, для получения дополнительной информации читайте this .