eval не печатает "Hello World" и по-прежнему выводит на stderr - PullRequest
0 голосов
/ 28 мая 2020

Я бы хотел, чтобы Perl или DBI не отправляли исключения из ошибок при подключении к базе данных. Моя цель - когда я не могу подключиться к базе данных ни по имени пользователя / паролю, ни по URL-адресу, чтобы отправить код на мой сервер мониторинга. не печатать «Hello World».

DBI connect('Driver={/opt/microsoft/msodbcsql17/lib64/libmsodbcsql- 
17.5.so.2.1};Server=xxxxx- 
xxxxxxx.com,1433;Database=xxxxxx','xxxxuser1',...) failed: [Microsoft][ODBC Driver 
17 for SQL Server][SQL Server]Login failed for user 'xxxxuser1'. (SQL-28000) at ./x.pl 
line 14.

1 Ответ

3 голосов
/ 28 мая 2020

По умолчанию методы DBI выводят сообщение об ошибке в STDERR и возвращают false в случае ошибки.

Чтобы включить генерирование исключения при ошибке, используйте следующий параметр:

RaiseError => 1

Чтобы отключить для печати в STDERR используйте следующую опцию:

PrintError => 0

(Это не останавливает вывод неперехваченных исключений в STDERR.)

Вот как это выглядит:

my $dbh = DBI->connect(
   "$dsn;Server=$host;Database=$database",
   $user, $auth,
   { PrintError => 0, RaiseError => 1 },
);
...