2008-10-21 3 views

Antwort

31

den Schalter wird alle Warnungen in alle Module von Ihrem Programm verwendet ermöglichen. Mit dem Pragma aktivieren Sie es nur in diesem spezifischen Modul (oder Skript). Idealerweise verwenden Sie Warnungen in allen Ihren Modulen, aber das ist oft nicht der Fall. Die Verwendung des Switches kann Ihnen eine Menge Warnungen geben, wenn Sie ein Modul eines Drittanbieters verwenden, das nicht warnsicher ist.

Also, im Idealfall ist es egal, aber pragmatisch ist es oft für Ihre Endnutzer vorzuziehen, nicht den Schalter, sondern das Pragma zu verwenden.

17

Der Befehlszeilenschalter -w aktiviert Warnungen global für den gesamten Interpreter. Auf der anderen Seite ist use warnings ein "lexikalisches Pragma" und gilt nur in dem lexikalischen Bereich, in dem es verwendet wird. In der Regel legen Sie das am Anfang einer Datei an, sodass es für die gesamte Datei gilt. Sie können es jedoch auch auf bestimmte Blöcke beschränken. Darüber hinaus können Sie no warnings verwenden, um sie vorübergehend in einem Block zu deaktivieren, falls Sie sonst ein Verhalten zur Warnung generieren müssen. Sie können das nicht tun, wenn Sie -w eingeschaltet haben.

Weitere Informationen darüber, wie lexikalische Warnungen funktionieren und wie verschiedene Teilmengen davon ein- und ausgeschaltet werden können, finden Sie im Dokument perllexwarn.

+2

Ihr Punkt „keine Warnungen“ ist das, was ich erwartet hatte, aber ein Schnelltest (Perl -w -e "no warnings; print $ a;") zeigte, dass zumindest auf meinem Perl "no warnings" auch mit -w noch funktioniert. –

10

"-w" ist älter und war die einzige Möglichkeit, Warnungen zu aktivieren (tatsächlich aktiviert "-w" nur die globale Variable $^W). "Warnungen verwenden" ist jetzt vorzuziehen (ab Version 5.6.0), weil es (wie bereits erwähnt) einen lexikalischen statt globalen Geltungsbereich hat, und Sie können bestimmte Warnungen ein-/ausschalten. Und vergessen Sie nicht, auch mit "use strict" zu beginnen. :-)

+0

Ab 5.6.0. Und es gibt Warnungen :: compat zu helfen, wenn Sie immer noch 5.5 interessieren. – Schwern

+0

Korrigiert. Ich wusste, ich sollte nur "5.6" sagen :-) – runrig

+0

Aber warum sollte jemand 5.6.0 sowieso verwenden wollen? :-) – runrig

-6

Tun Sie beides! Immer!

+0

Warum wählst du das aus? – JDrago

5

Eine weitere bemerkenswerte Anmerkung ist, dass das Pragma "Warnungen verwenden" auch die Auswahl bestimmter Warnungen ermöglicht (und ebenso "keine Warnungen" die Auswahl von Warnungen zum Deaktivieren).

1

Neben der Aktivierung/Deaktivierung bestimmter Behauptungen der Pragma verwenden, können Sie auch einige oder alle Warnungen zu Fehlern fördern:

use strict; 
use warnings FATAL => 'all', NONFATAL => 'exec'; 
+2

Das ist eine gute Idee während der Entwicklung, aber es ist möglicherweise keine so gute Idee in der Bereitstellung. –

Verwandte Themen