15

Perl スクリプトを開始するための以下の 2 つの例に違いはありますか? もしそうなら、いつ一方を他方に使用しますか?

例 1:

#!/usr/bin/perl

use warnings;

例 2:

#!/usr/bin/perl -w
4

5 に答える 5

31

スイッチを使用すると、プログラムで使用されるすべてのモジュールですべての警告が有効になります。プラグマを使用すると、その特定のモジュール (またはスクリプト) でのみ有効になります。理想的には、すべてのモジュールで警告を使用しますが、多くの場合、そうではありません。このスイッチを使用すると、警告セーフではないサードパーティ製モジュールを使用しているときに多くの警告が表示される可能性があります。

したがって、理想的には問題ではありませんが、実用的には、エンドユーザーがスイッチではなくプラグマを使用することをお勧めします。

于 2008-10-21T13:44:22.730 に答える
17

コマンドライン スイッチは-w、インタープリター全体に対してグローバルに警告をオンにします。一方、use warningsは「レキシカル プラグマ」であり、それが使用されているレキシカル スコープでのみ適用されます。通常、ファイル全体に適用されるようにファイルの先頭に配置しますが、特定のブロックにスコープすることもできます。さらに、no warnings他の方法で警告を生成する動作を行う必要がある場合に、ブロック内でそれらを一時的にオフにするために使用できます。あなたが乗っている場合、あなたはそれを行うことはできません-w

字句警告がどのように機能するかの詳細については、それらのさまざまなサブセットをオンまたはオフにする方法を含めて、perllexwarnドキュメントを参照してください。

于 2008-10-21T14:25:13.160 に答える
10

"-w" は古く、警告をオンにする唯一の方法でした (実際には "-w" はグローバルな $^W 変数を有効にするだけです)。「警告を使用します。」(バージョン 5.6.0 以降) は、(既に述べたように) グローバル スコープではなくレキシカル スコープを持ち、特定の警告をオン/オフできるため、(バージョン 5.6.0 以降で) 推奨されます。また、「use strict;」から始めることも忘れないでください。:-)

于 2008-10-21T15:23:15.773 に答える
5

注目に値するもう 1 つの違いは、「use warnings」プラグマを使用すると、特定の警告を選択して有効にすることもできることです (同様に、「no warnings」を使用すると、警告を選択して無効にすることができます)。

于 2008-10-21T21:10:03.157 に答える
2

プラグマを使用して特定のアサーションを有効/無効にするだけでなく、一部またはすべての警告をエラーに昇格させることもできます。

use strict;
use warnings FATAL => 'all', NONFATAL => 'exec';
于 2008-10-22T21:09:27.527 に答える