Uświadomiłem sobie, że istnieje problem z ostrzeżeniem po użyciu zapisu XML :: Smart.Perl, ostrzegam, że nie działa po 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";
badanie zostało wykonane w OSX 10.8.2 wersja Perl 5.12.4 1,77
ta jest prawdopodobnie ściśle związany z wewnętrznego działania XML :: elegancko, ale czy istnieje sposób, aby przywrócić xml-smart wersja drukowanie ostrzeżenia (reset STDERR).
[EDIT 19/3/2013]: W konstruktorze HP-UX jest również problematyczny. Obejście przedstawione poniżej przez ikegami może być użyte zarówno dla nowych, jak i dla zaoszczędzenia, aby przezwyciężyć problem.
To działa dobrze dla mnie. Jestem na Strawberry Perl 5 wersja 16.2. Czy na pewno nie przegapisz ostrzeżenia? Nie pojawi się jako ostatni wiersz wyjścia, chyba że zaczniesz od 'STDOUT-> autoflush'. – Borodin
Potwierdzone: ten sam problem na archlinuksie x86_64, XML-Smart-1.77 i perlu 5.16.2, powinieneś wypełnić zgłoszenie błędu. Z '$ | ++', nic się nie zmienia –
Wydaje się, że jest to związane z funkcją o nazwie '_unset_sig_warn()' zdefiniowaną w 'XML :: Smart :: Shared', która próbuje wyłączyć' $ SIG {__ WARN __} ', przechowując ją w zmienna leksykalna. – TLP