【发布时间】:2013-03-17 16:58:35
【问题描述】:
我意识到使用 XML::Smart save 后出现警告问题。
#!/usr/bin/perl
use strict;
use warnings;
use XML::Smart;
my $XML = XML::Smart->new() ;
print STDOUT "Before save: Print to STDOUT works\n";
print STDERR "Before save: Print to STDERR works\n";
warn "Before save: Warn works\n";
$XML->save('newfile.xml') ;
print STDOUT "After save: Print to STDOUT works\n";
print STDERR "After save: Print to STDERR works\n";
warn "After save: Warn does not work\n";
测试在 OSX 10.8.2 perl 版本 5.12.4 xml-smart 版本 1.77 中完成
这可能与 XML::Smart 的内部工作密切相关,但有没有办法恢复警告的打印(重置 STDERR)。
[EDIT 19/3/2013]:在 HP-UX 构造函数中也存在问题。 ikegami 下面提供的解决方法可用于新建和保存以解决该问题。
【问题讨论】:
-
这对我来说很好用。我在 Strawberry Perl 5 版本 16.2 上。你确定你没有错过警告吗?除非您以
STDOUT->autoflush开头,否则它不会显示为输出的最后一行。 -
已确认:archlinux x86_64、XML-Smart-1.77 和 perl 5.16.2 上的相同问题,您应该填写错误报告。使用
$|++,没有任何变化 -
这似乎与
XML::Smart::Shared中定义的名为_unset_sig_warn()的函数有关,该函数试图通过将$SIG{__WARN__}存储在词法变量中来禁用它。