Halihallo $xNeTworKx
..., bei denen nicht in den ersten Zeilen ein -w oder "use strict" vorkommt.
Falsch formuliert. Ich will eigentlich sagen, dass auf jeden Fall "use strict" drin stehen sollte, und mindestens use warnings oder -w.
Wenn nicht, schmeiß das Script am Besten in den Müll.
Ich stimme dir eigentlich zu. "Eigentlich" deshalb, da es nicht direkt mit use strict
und use warnings zusammenhängt, dass Scripts "auf den Müll" sollten, sondern weil ein
Unterlassen derselben meist ein Fingerprint/-abdruck derjenigen ist, die von Perl
etwas weniger Ahnung haben bzw. nach dem Prinzip "möglichst schnell, hauptsache es
funktioniert" vorgehen. Es gibt natürlich noch weitere Kriterien, die für mich Anlass
zum "vermüllen" von Scripts sind, z. B. print "$var" oder $var=5; if("$var"=="5"), ja
sogar print "hello" ist schlecht, da aperformant (bitte einfache Quotes verwenden)...
Aber zurück zu use strict; und use warnings; :
Diese beiden (+ Tainted-Mode sei hier noch genannt) dienen dazu Fehler[1] im Script
vorzeitig und _schneller_ zu finden und den Style des Scripts zu verbessern. Sind also
primär für den Erstellungszyklus wichtig; natürlich muss ein Script oftmals überarbeitet
und erweitert werden, dies ist oftmals die Ursache, dass die genannten Schalter meist im
Script verweilen, obwohl, und darauf möchte ich hinaus, sie gar nicht mehr nötig wären
und eventuell (untested[tm]) sogar Performance _verschwenden_. Wäre wirklich mal
interessant zu wissen, ob ein "use strict" Performance braucht, natürlich muss der
Perlinterpreter einige Tests [s. [1]] durchführen und verbraucht somit CPU-Zeit, auf der
anderen Seite können für Variablen bereits beim Start-up und in der compilation-phase
Platz auf dem Heap reservieren werden. Es wird wohl also vom jeweiligen Kontext
abhängen. Basierend auf _dieser_ Argumentation gäbe es aus Sicht der Performance
wirklich nur einen Schluss:
Zum Erstellen und Debuggen von Scripts wird use strict; und use warnings; eingesetzt,
jedoch im "laufenden System" entfernt. Somit müssen vom Interpreter keine Tests mehr
durchgeführt werden und die Variablen können dennoch in der compilation-phase
eingerichtet werden. Wie gesagt: Dies basiert auf der ungetesteten Annahme vom letzten
Absatz und ist in der Praxis wohl auch nicht sehr wichtig, da es sich lediglich um
einige ms/ns handeln kann.
[1] unter Fehler verstehe ich auch globale Variablen in gewissen Fällen;
Mehrfachdefinitionen derselben, Nichtdeklaration/-iniziierung etc.
Viele Grüsse
Philipp
<!-- dem gerade langweilig war und sich mit philosophischen Fragen zu Perl
beschäftigte ;-)