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>

  • 在-style 循环中使用默认值$_作为循环变量可能被认为是一种不好的做法。foreach通常最好引入一个新的词法变量,其范围仅限于循环,例如

    for my $pet (@pets) {
      $pet->feed($pet->favourite_treat);
    }
    
  • 子例程原型是子定义后括号中的东西,如sub foo() { ... }. 除非您已经知道原型在 Perl 中的作用,否则不要使用它们,只需sub foo { ... }.

  • 执行open类似操作被认为是一种好习惯

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

    如果您use autodie. 显式模式可以避免 shell 注入(考虑有效的文件名rm -rf *; echo pwned |)。这对于现代 Perl 来说是必须的。

您可能不同意其中的一些规则(至少我同意,在其中两种情况下)。您可以使用.perlcriticrc文件将规则修改为您的偏好。请参阅perlcritic 文档

于 2013-06-18T21:18:03.793 回答