perl - 如何抑制来自 DBI 的任意警告/错误消息?

标签 perl

代码:

# A:
$dbh->do(qq/insert into foo(cl) values('test')/);
# B:
$dbh->do(qq/insert into foo(cl) values('test')/) or warn $dbh->errstr;
# C:
eval { $dbh->do(qq/insert into foo(cl) values('test')/); };
warn "error : $@ " if $@;

全部输出:

DBD::mysql::db do failed: Duplicate entry 'test' for key 'cl' at a.pl line 9.

我不希望将此任意警告/错误消息发送到标准错误。我想使用 warn $dbh->errstr

perl a.pl 2>/dev/null 会抑制错误消息,但我想知道如何在脚本中执行此操作?

最佳答案

您需要安装自己的错误处理程序。例如

$dbh->do($statement, { HandleError => \&handle_error });

DBI POD 中描述了错误处理程序

另一种选择是:

  • PrintWarn 属性设置为 false 值(感谢 Sinan 在某个论坛上的回答

  • 通过信号处理程序捕获所有警告:$SIG{'__WARN__'} = sub {};

关于perl - 如何抑制来自 DBI 的任意警告/错误消息?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9406558/

相关文章:

arrays - 在 perl 中对数组使用编辑距离

perl - 如何在ldap中按dn搜索

java - 拼出时间

regex - 替换文件夹名称中的文本

perl - 三元运算符不允许在其中使用迭代运算符,但 if-else 允许吗?

perl - 通过 Perl 进行 SSH 登录

perl - 如何从重复超过六次的文件中打印行

linux - Bash AWK 找到多个模式并分配给不同的变量

perl - 如何在 Perl 中计算 wav 文件的 MD5 哈希?

perl - 这个 Perl 格式错误的原因是什么?