2012-06-17 8 views
10

En el perllexwarn se definen todas las advertencias que es posible establecer.¿Cómo obtener el conjunto de comprobaciones de advertencia actualmente habilitadas en el módulo perl?

Pero aquí no hay nada, cómo imprimir las advertencias que tengo habilitadas actualmente.

ej .:

use strict; 
use warnings; 

print warnings::enabled->pretty_print(); #fictional... 

¿Cómo es posible?

ejemplo:

use strict; 
use 5.012; 
use warnings; 

my $aaa; 
say "$aaa"; 

say warnings::enabled("uninitialized") ? "yes" : "no"; 

Lo anterior es la salida:

Use of uninitialized value $aaa in string at y line 6. 

no 

así, el nivel de advertencia es "sin inicializar" se "ajuste", debido a que sus impresiones una advertencia, pero no el warnings::enabled("uninitialized") vuelve true .

Respuesta

7

lectura perllexwarn

... funciones que son útiles para los autores de los módulos. Estos se utilizan cuando quiere informar una advertencia específica del módulo a un módulo que llama tiene advertencias habilitadas a través del pragma "advertencias".

Si he entendido bien, significa que las funciones (enabled, warnif) sólo funcionan para avisos específicos del módulo, no para las categorías estándar. (Probablemente hay una falta "que" antes "tiene" en la documentación.)

Actualización: Parece categorías estándar funcionan tan bien, pero sólo en un módulo:

package MY; 
use warnings::register; 
sub S { 
    my $x; 
    print $x, "\t"; 
    print warnings::enabled("uninitialized"),"\n"; 
} 

package main; 
use warnings; 
MY::S(); 
no warnings; 
MY::S(); 
+1

derecho, es destinado a ser utilizado por los autores del módulo, para determinar si el código que está utilizando el módulo ha activado las advertencias. Si no es un autor del módulo, y coloca "usar advertencias" en su secuencia de comandos, entonces ya sabe que están encendidos, no hay ninguna posibilidad de verificarlos. –

+0

@Dondi Michael Stroma, entonces 'use warnings' es lo mismo que' use warnings qw (all) '? Y cuando alguien usa 'use uni :: perl', ¿qué advertencia se establecerá y qué no? (Puede leer el código fuente para verificarlo) pero de todos modos, aquí debe haber alguna manera de verificar qué bits están activados. P.ej. de alguna manera con $ {^ WARNING_BITS} o tan ... – jm666

+0

También depende de cómo llame a su script. 'perl -le 'usa advertencias; imprimir $^W, advertencias :: habilitado ("no inicializado"); '' devolverá '00' pero con' -w' devolverá '11'. –

Cuestiones relacionadas