加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

Perl,在XML :: Smart保存后警告不能正常工作

发布时间:2020-12-15 21:47:56 所属栏目:大数据 来源:网络整理
导读:我意识到使用 XML :: Smart保存后出现警告问题. #!/usr/bin/perluse strict;use warnings;use XML::Smart;my $XML = XML::Smart-new() ;print STDOUT "Before save: Print to STDOUT worksn";print STDERR "Before save: Print to STDERR worksn";warn "Be
我意识到使用 XML :: Smart保存后出现警告问题.
#!/usr/bin/perl

use strict;
use warnings;

use XML::Smart;

my $XML = XML::Smart->new() ;

print STDOUT "Before save: Print to STDOUT worksn";
print STDERR "Before save: Print to STDERR worksn";
warn "Before save: Warn worksn";

$XML->save('newfile.xml') ;

print STDOUT "After save: Print to STDOUT worksn";
print STDERR "After save: Print to STDERR worksn";
warn "After save: Warn does not workn";

测试在OSX 10.8.2 perl版本5.12.4 xml-smart版本1.77中完成

这可能与XML :: Smart的内部工作方式密切相关,但有一种方法可以恢复警告的打印(重置STDERR).

[编辑19/3/2013]:在HP-UX构造函数中也存在问题. ikegami下面提供的解决方法可以用于new和save来克服这个问题.

解决方法

正如TLP指出的那样,问题与XML :: Smart摆弄$SIG {__ WARN__}有关.

以下是该错误的解决方法:

{
    local $SIG{__WARN__} = $SIG{__WARN__};
    local $SIG{__DIE__}  = $SIG{__DIE__};
    $XML->save('newfile.xml') ;
}

正如Borodin解释的那样,这种解决方法将XML :: Smart修改的%SIG的两个元素本地化,以便将损坏限制在封闭块中.在调用$XML-> save之后立即在块结束时自动恢复这些值.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读