1

Perl で未使用の変数に対して警告を生成するにはどうすればよいですか?

my $var1 = 0;
my $var2 = 10;
printf("%d",$var2);

$var1未使用の警告を生成する必要があります

編集スクリプトを 試しperlcriticてみましたが、これらの警告のそれぞれがいくつか表示されました。これらのそれぞれの意味は何ですか? とにかく、未使用の変数の警告は表示されません。

#Bareword file handle opened at line 98, column 9.  See pages 202,204 of PBP.  (Severity: 5)
#Loop iterator is not lexical at line 1068, column 5.  See page 108 of PBP.  (Severity: 5)
#Subroutine prototypes used at line 553, column 1.  See page 194 of PBP.  (Severity: 5)
#Two-argument "open" used at line 1072, column 5.  See page 207 of PBP.  (Severity: 5)
4

2 に答える 2

2

warnings::unused perl モジュールを見てください。その目的のために設計されています。

perlcriticコメントで述べた amon のように使用することもできます。

于 2013-06-18T20:11:37.677 に答える
1

これを検出するために使用するトピックについてperlcritic

ProhibitUnusedVariablesルールを間違えました。そのルールの現在の実装では代入を用途として扱うため、ここでは適用されません。

つまり、 では警告しますが、 では警告しmy $unused;ませんmy $unused = 1;

を使用するperlcriticには、デフォルトの「優しい」-5から「残忍な」までの重大度を要求できます-1

警告の簡単な説明:

  • 裸のファイルハンドルは時代遅れと見なされます。open my $fh, ...;やなどのレキシカル変数を使用しますmy $line = <$fh>

  • スタイル$_のループでデフォルトをループ変数として使用することは、悪い習慣と見なすことができます。foreach通常は、スコープがループに制限された新しいレキシカル変数を導入することが望ましいです。

    for my $pet (@pets) {
      $pet->feed($pet->favourite_treat);
    }
    
  • サブルーチンのプロトタイプは、 のように、サブ定義の後の括弧内のものですsub foo() { ... }。Perl でプロトタイプが何をするかを既に知っている場合を除き、それらを使用しないでくださいsub foo { ... }

  • openlikeを実行することは良い習慣と考えられています

    open my $fh, "<", $filename or die "Can't open $filename: $!";
    

    の場合、エラー処理は省略できますuse autodie。明示モードでは、シェル インジェクションを回避できます (有効な filename を考慮してくださいrm -rf *; echo pwned |)。これは、最新の Perl では必須です。

あなたはこれらの規則のいくつかに同意しないかもしれません (少なくとも私は、これらの 2 つのケースで同意します)。ファイルを使用.perlcriticrcして、好みに合わせてルールを変更できます。perlcriticのドキュメントを参照してください

于 2013-06-18T21:18:03.793 に答える