2012-06-17 6 views
10

In der perllexwarn sind alle Warnungen definiert was möglich ist zu setzen.Wie erhalten Sie die derzeit im Perl-Modul aktivierten Warnschecks?

Aber hier ist nichts darüber, wie Sie ausdrucken, welche Warnungen ich derzeit aktiviert habe.

Z. B .:

use strict; 
use warnings; 

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

Wie ist es möglich?

Beispiel:

use strict; 
use 5.012; 
use warnings; 

my $aaa; 
say "$aaa"; 

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

Die oben AUSGABE:

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

no 

so, die "nicht initialisierte" Warnung Kategorie "gesetzt", weil sein Druck einer Warnung, aber die warnings::enabled("uninitialized") nicht zurückkehrt true .

Antwort

7

Lesen perllexwarn

... Funktionen, die für die Modul Autoren nützlich sind. Diese werden verwendet, wenn Sie eine modulspezifische Warnung an ein aufrufendes Modul melden möchten, das über das Pragma "Warnungen" Warnungen aktiviert hat.

Wenn ich es richtig verstehe, bedeutet es die Funktionen (enabled, warnif) nur für modulspezifische Warnungen arbeiten, nicht für die Standardkategorien. (Es gibt wahrscheinlich eine fehlende „das“ vor „hat“ in der Dokumentation.)

Update: Es Standardkategorien scheint so gut funktionieren, aber nur in einem Modul:

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

Richtig, es ist soll von Modulautoren verwendet werden, um festzustellen, ob der Code, der das Modul verwendet, Warnungen aktiviert hat. Wenn Sie kein Modulautor sind und in Ihrem Skript "Warnungen verwenden" verwenden, wissen Sie bereits, dass sie aktiviert sind. Es gibt keine Möglichkeit, sie zu überprüfen. –

+0

@Dondi Michael Stroma, also 'Warnungen verwenden 'ist das gleiche wie' Warnungen verwenden qw (alle) '? Und wenn jemand 'uni :: perl benutzt, welche Warnung wird gesetzt und was nicht? (Sie können den Quellcode zur Überprüfung lesen), aber trotzdem - hier muss eine Möglichkeit sein, zu überprüfen, welche Bits eingeschaltet sind. Z.B. etwas mit den $ {^ WARNING_BITS} oder soo ... – jm666

+0

Es hängt auch davon ab, wie Sie Ihr Skript aufrufen. 'perl -le 'verwendet Warnungen; print $^W, warnings :: enabled ("nicht initialisiert"); ''gibt' 00' zurück, aber mit '-w' wird' 11' zurückgegeben. –

Verwandte Themen