use strict
をperlプログラムに追加すると、重要な警告メッセージが無効になります。これはperlのバグですか?perl、 'use strict'は重要な警告を無効にします
この小さなプログラムは、問題
#!/usr/bin/perl -w
my $rule;
sub applyRule() {
eval $rule;
}
my $foo_bar;
$foo_bar = "mega-foo-bar-ness";
$rule = 's/#FOO_BAR/$foo_bar/g';
$_ = "Please replace #FOO_BAR with something.";
applyRule();
print STDERR "OUTPUT: $_\n";
を持っており、そのプログラムを実行しているときに我々は役に立ち警告メッセージが表示されます:
$ ./test1.pl
Use of uninitialized value $foo_bar in substitution (s///) at (eval 1) line 1.
OUTPUT: Please replace with something.
が今だけ黙っuse strict;
#!/usr/bin/perl -w
use strict;
my $rule;
sub applyRule() {
eval $rule;
}
my $foo_bar;
$foo_bar = "mega-foo-bar-ness";
$rule = 's/#FOO_BAR/$foo_bar/g';
$_ = "Please replace #FOO_BAR with something.";
applyRule();
print STDERR "OUTPUT: $_\n";
に置換を追加失敗する。
$ ./test1.pl
OUTPUT: Please replace #FOO_BAR with something.
私はPerlで神秘的なエラーを持っている私はいつも、私はいくつかの有用な警告を得るかどうかを確認するためにuse strict
を削除してみてください?
編集1私はこれがWhy use strict and warnings?の複製ではない理由を説明するように頼んでいます。これは、use strict
を追加すると警告が少なくなるため、デバッグが難しくなります。これは、私がuse strict
とは逆の動作です。
プラグマは、他の方法で検出されるよりも早く多くのエラーをキャッチし、エラーの根本原因を簡単に見つけることができます。
編集2:誰がこれを見ての場合:別の方法は次のとおりです。
defined (eval $rule) or warn "eval error: [email protected]\n";
エラーが発生した場合にはevalリターンが未定義であるため。セクションのプログラミングPerlの本の状態についてのeval
構文エラーまたは実行時にエラーが発生した場合、evalのは、未定義の値を返すと$ @にエラーメッセージが表示されます。エラーがなければ、$ @はヌル文字列に設定されていることが保証されているので、後でエラーを確実にテストできます。
ただし、with versions prior to Perl 5.14 there can be problems relying on '[email protected]`に注意してください。
可能な複製(http://stackoverflow.com/questions/8023959/why-use-strict-and-warnings) –
短い:追加"警告を使用する 'all';"スクリプトを改善する。 –
'use strict'を省略すると、宣言されていない変数を使用してもコンパイル時にエラーは発生しません。したがって、 'eval'は成功しますが、警告が出力されます。 'use strict'をインクルードすると' eval'は失敗し、警告は出力されません。 –