/ / Qualsiasi modo per disattivare la segnalazione generata nell'istruzione 'use Module' in Perl - perl

Qualsiasi modo per disattivare l'avviso generato nell'istruzione 'use Module' in Perl - perl

Attualmente sto usando il XML::LibXML modulo nel mio script Perl. Il XML::LibXML il modulo che stiamo attualmente utilizzando sulle nostre macchine è stato compilato su una versione più recente di libxml2 libreria e l'istruzione use genera il seguente avviso:

Warning: XML::LibXML compiled against libxml2 20708, but runtime libxml2 is older 20706

L'avviso non influisce sulle prestazioni del mioscript. Ho parlato con il mio supervisore e lei dice che l'errore può essere completamente ignorato per i nostri scopi attuali. C'è un modo per disattivare temporaneamente questo avviso senza disattivare TUTTI gli avvertimenti? Ho provato a racchiudere il messaggio use dichiarazione all'interno di un blocco di codice {} e disattivato gli avvisi con no warnings;, ma ho ancora ricevuto l'avvertimento.

risposte:

3 per risposta № 1

È possibile inibire gli avvertimenti, anche quelli come quelli emessi a seguito di una chiamata esplicita a warn funzione, impostando $SIG{__WARN__}.

Un semplice esempio di lavoro (migliorato grazie al commento di ysth):

mod.pm:

package mod;

sub method {
print "This is mod::methodn";
}

warn "WE DO NOT WANT THIS WARNINGn";

1;

foo.pl:

#!/usr/bin/perl

use strict;
use warnings;

BEGIN {
local $SIG{__WARN__} = sub {};
require mod;
mod::->import();
}

warn "Normal warnings workn";
mod::method();

L'output è:

Normal warnings work
This is mod::method

e ho confermato che commentando l'impostazione di $SIG{__WARN__} fa apparire l'avviso "NON VOGLIONO".