Ist es notwendig, Warnungen zu verwenden, wenn Sie bereits strict verwenden?

8

Code wie folgt:

%Vor%

Ist use warnings; hier notwendig?

    
new_perl 21.06.2011, 07:17
quelle

6 Antworten

8

Ja, das ist notwendig.

use strict und use warnings machen verschiedene Dinge.

Von der Hilfeseite des Moduls strict :

  

strict - Perl-Pragma, um unsichere Konstrukte einzuschränken

Von perlrun (für -w ):

  

druckt Warnungen über zweifelhaft   Konstrukte wie Variablennamen               das sind nur einmal erwähnt und skalare Variablen, die sind   benutzt               vor dem Festlegen, neu definierte Unterprogramme, Verweise auf   nicht definiert               Dateihandles oder Dateihandles geöffnet schreibgeschützt, dass Sie sind               Versuche zu schreiben, Werte als eine Zahl, die nicht verwendet werden   aussehen               wie Zahlen, mit einem Array, als wäre es ein Skalar, wenn   Ihre               Subroutinen rekrutieren mehr als 100 tief und unzählige andere               Dinge.

    
Alnitak 21.06.2011, 07:28
quelle
5

Ja. strenge Wachen gegen eine sehr begrenzte Anzahl von Dingen. Warnungen warnen Sie vor einem anderen und viel größeren Problemkomplex.

    
ysth 21.06.2011 07:29
quelle
4

Dieselbe Frage ist vor ein paar Tagen hier aufgetaucht: Welches Sicherheitsnetz verwenden Sie in Perl? . Dieser Link führt zu einer Diskussion von Strikten, Warnungen, Diagnosen und anderen ähnlichen Themen.

    
DavidO 21.06.2011 09:13
quelle
3

Ja, beachte:

%Vor%

strict lässt Sie nicht wissen, dass $ f undefiniert ist, während Warnungen hinzufügen:

%Vor%

also der Rat, beide zu aktivieren.

    
Alex 21.06.2011 07:32
quelle
2

Es ist nicht notwendig in der eigentlichen Bedeutung dieses Wortes. Das heißt, ein Programm benötigt keinen Betrieb. Die Leute vergessen oft, was notwendig bedeutet.

Wenn Ihre Frage jedoch lautet: "Ist Warnungen strikt aktivieren?" lautet die Antwort Nein. Sie können sehen, was strikt ist, indem Sie die Dokumentation lesen.

warnings sind oft nützlich, um auf Probleme hinzuweisen, die Sie beheben sollten. Die Warnungen von Perl erfordern jedoch nicht, dass Sie sie beheben. Ihr Programm kann also fortgesetzt werden, obwohl es Warnungen ausgibt.

Einige Leute werden dir sagen, dass du immer Warnungen verwenden sollst, aber sie machen diese Art von Regel, damit sie nicht darüber nachdenken oder es Leuten erklären müssen, die nicht darüber nachdenken. Es ist eine unpopuläre Position, etwas anderes als "immer Warnungen verwenden" zu sagen.

warnings sind ein Werkzeug für Entwickler, und wenn die Leute, die die Warnungen sehen, nicht wissen, was sie sind oder was sie dagegen tun sollen, werden sie wahrscheinlich nur Ärger oder Verwirrung verursachen. Ich habe ein paar Fälle gesehen, in denen neue Perls neue Warnungen für Programme ausgaben, die dann die Festplatten füllten, da niemand die Protokolldateien überwachte.

Ich habe eine viel nuanciertere Regel "benutze Warnungen, wenn du etwas gegen sie tun wirst, und benutze sie nicht, wenn du es nicht tust".

Ich gehe noch nicht mal so weit und sage "Immer warnfreien Code schreiben". Es gibt viel Code, den ich schreibe, den ich genau einmal ausführen werde, oder von der Befehlszeile, oder in anderen Situationen, in denen mir die Schlamperei egal ist. Ich mag es nicht, anderen Leuten warnenden, schmutzigen Code zu geben, aber ich mache mir keine Sorgen um Kleinigkeiten, die ich für mich selbst tue.

    
brian d foy 06.07.2011 18:18
quelle
1

"Was meinst du mit notwendig?" ist meine Antwort.

Wenn Sie denken, dass strict und warnings dasselbe sind, liegen Sie falsch. Andere Leute hier haben sehr gute Antworten gegeben, was jedes Pragma betrifft.

use warnings wird Sie im Allgemeinen zu einem besseren Coder machen. Wenn Lernen wichtig ist, dann wäre meine Antwort "Ja".

Es wird Ihnen auch helfen, Fehler zu vermeiden, damit Ihre Fehler leichter zu verstehen sind.

Im Allgemeinen würde ich sagen, dass es sehr wenige Fälle gibt, in denen es gerechtfertigt ist, sowohl strict als auch warnings nicht zu verwenden. Ich verwende sogar Warnungen in meinen Einzeilern, z. > perl -we 'print "Hello world!"'

Es dauert ein paar Sekunden, um zu tippen, aber sparen Sie Stunden unnötiger Arbeit Debugging.

    
TLP 21.06.2011 10:17
quelle

Tags und Links