Perl が何をしているかを正確に理解するのに役立ちますuse strict
。use warnings
Perl が何をしているのか、そしてその理由を常に理解している人(つまり、ほとんど誰もいない) は、スペースとおそらく実行時間を節約するために、それらを省略する資格があります。残念ながら、スペースと時間を節約したいと考えている人々の多くは、 Perl が何をなぜ行っているのかを正確に理解していない人々であり、Perl が何をしているのかについての彼らの理解は、他の言語から学んだ非常に多くの誤った仮定に基づいています。それらを省略することは絶対に許されるべきではありません。
他にもいくつかの正当な理由があります。
- すでに完全に認識している警告を生成する動作を試す (たとえば、多くの再帰)
- 古いパッケージを使用する (ただし、2000 年 7 月頃以降に作成された私のパッケージはいずれも、
use strict
またはuse warnings
でメッセージを生成しません。したがって、ここでの「古い」は、Perl バージョン 4 以前のように、本当に、本当に古いことを意味します)
- 誰も期待しないような魔法のような Perl の動作を利用したい場合 (ただし、あなたは専門家だから当然のことですが)、そのための警告の代償を払いたくない場合。
ところで、任意の入力を受け入れ、その入力に基づいてアクションを実行するプログラムの場合、-T
フラグを使用して、ユーザー入力から取得した汚染された可能性のあるデータの使用を追跡することも非常に重要です。
更新: @mob は、いくつかの調査が必要なコメントで主張しています。つまり、strict と warnings を使用しないことは、平均的な意味のないマイクロ最適化よりも低いマイクロ最適化です。以下のすべてのケースで、strict と warnings を使用しない場合のリアルタイムは 12 ミリ秒であり、以下のすべてのケースで、それらを使用する場合のリアルタイムは 57 ミリ秒以上です。
したがって、最初に述べたように、実行時間にメリットがある可能性があります (これは、テンプレート内に Perl スクリプトを埋め込み、Web ページが読み込まれるたびに一度に 10 または 20 個のスクリプトを実行するようなことをしている場合にのみ問題になります。例)、しかし、Perl が何をなぜ行っているのかを常に正確に把握していない限り、それらを使用することをお勧めします。このカテゴリの「専門家」についての私の説明は、空のセットに非常に近いことを意図しています。あなたがこのカテゴリーに当てはまると思うなら、あなたは自動的にそうではありません。
[j@5 ~]$ time perl -e '1;'
real 0m0.012s
user 0m0.005s
sys 0m0.007s
[j@5 ~]$ time perl -e '1;'
real 0m0.012s
user 0m0.010s
sys 0m0.005s
[j@5 ~]$ time perl -e '1;'
real 0m0.012s
user 0m0.011s
sys 0m0.001s
[j@5 ~]$ time perl -e '1;'
real 0m0.012s
user 0m0.004s
sys 0m0.007s
[j@5 ~]$ time perl -e '1;'
real 0m0.012s
user 0m0.005s
sys 0m0.007s
[j@5 ~]$ time perl -e 'use strict; use warnings;'
real 0m0.058s
user 0m0.058s
sys 0m0.000s
[j@5 ~]$ time perl -e 'use strict; use warnings;'
real 0m0.057s
user 0m0.041s
sys 0m0.016s
[j@5 ~]$ time perl -e 'use strict; use warnings;'
real 0m0.057s
user 0m0.033s
sys 0m0.025s
[j@5 ~]$ time perl -e 'use strict; use warnings;'
real 0m0.057s
user 0m0.050s
sys 0m0.009s