从perl DBI execute中抑制stderr

从perl DBI execute中抑制stderr,perl,dbi,Perl,Dbi,我不想从$sth->控制台上执行显示stderr。如何抑制它?这由DBI句柄的和设置控制。我通常在建立初始数据库连接$dbh=DBI->connect$data\u source、$user、$pass、{PrintWarn=>0,PrintError=>0}时全局关闭它们;因为我更喜欢自己做错误处理和报告,但也可以使用该方法在每个语句级别上设置它们,在单个执行时关闭它们,然后再打开,等等。这由DBI句柄的和设置控制。我通常在建立初始数据库连接$dbh=DBI->connect$data\u s

我不想从$sth->控制台上执行显示stderr。如何抑制它?

这由DBI句柄的和设置控制。我通常在建立初始数据库连接$dbh=DBI->connect$data\u source、$user、$pass、{PrintWarn=>0,PrintError=>0}时全局关闭它们;因为我更喜欢自己做错误处理和报告,但也可以使用该方法在每个语句级别上设置它们,在单个执行时关闭它们,然后再打开,等等。

这由DBI句柄的和设置控制。我通常在建立初始数据库连接$dbh=DBI->connect$data\u source、$user、$pass、{PrintWarn=>0,PrintError=>0}时全局关闭它们;因为我更喜欢自己做错误处理和报告,但也可以使用该方法在每个语句级别设置它们,在单个执行时关闭它们,然后再打开它们,等等。

这是否回答了您的问题?在删除die$sth->execute$product\u code、$qty、$price之后,我想从$sth->execute中抑制stderr,不应该在控制台上打印错误。通过编写$SIG{uuuuu WARN\uuuu}钩子,可以在很大程度上控制进入stderr流的内容。请参阅中的%SIG哈希。但我不确定你到底在问什么……考虑到别人可能想要这些错误,尽管在你的用例中你没有。这可能意味着不使用它,而是将标准输出重定向到空设备。但是,当您需要警告时,警告就会出现。这是否回答了您的问题?在删除die$sth->execute$product\u code、$qty、$price之后,我想从$sth->execute中抑制stderr,不应该在控制台上打印错误。通过编写$SIG{uuuuu WARN\uuuu}钩子,可以在很大程度上控制进入stderr流的内容。请参阅中的%SIG哈希。但我不确定你到底在问什么……考虑到别人可能想要这些错误,尽管在你的用例中你没有。这可能意味着不使用它,而是将标准输出重定向到空设备。不过,当您需要时,警告就会出现。
my $sth = $dbh->prepare(q{
  INSERT INTO sales (product_code, qty, price) VALUES (?, ?, ?)
}) or die $dbh->errstr;
while (<>) {
    chomp;
    my ($product_code, $qty, $price) = split /,/;
    $sth->execute($product_code, $qty, $price) or die $dbh->errstr;
}
$dbh->commit or die $dbh->errstr;