Понятия не имею, правильно ли вы просите XML :: LibXML не печатать свои предупреждения. Я предполагаю, что это так, и это ошибка в XML :: LibXML (о которой вы также должны сообщить автору), и она содержит только способы подавления предупреждений.
Каждый раз, когда должно быть напечатано предупреждение, perl ищет значение $SIG{__WARN__}
и, если оно содержит ссылку на код, вызывает его вместо печати самого предупреждения.
Вы можете использовать эту функцию, чтобы предупреждения, которые вы хотите игнорировать, были напечатаны на STDERR
. Тем не менее, вы должны быть осторожны с этим. Обязательно подавляйте только ложные срабатывания, а не все предупреждения. Предупреждения обычно полезны. Кроме того, убедитесь, что вы используете $SIG{__WARN__}
в минимально возможном объеме, чтобы избежать побочных эффектов.
# warnings happen just as always
my $parser = ...;
$parser->set_options(...);
{ # in this scope we filter some warnings
local $SIG{__WARN__} = sub {
my ($warning) = @_;
print STDERR $warning if $warning !~ /validity error/;
};
$parser->parse_html_file(...);
}
# more code, now the warnings are back to normal again
Также обратите внимание, что все это при условии, что эти предупреждения приходят из perl-space. Вполне возможно, что libxml2, библиотека C, которую использует XML :: LibXML, записывает предупреждения непосредственно в stderr. $SIG{__WARN__}
не сможет помешать этому.