7

作为一个 perl 新手,我刚刚遇到了一个错误,我不小心做了类似的事情(示例简化):

my $i=0;
 for(my $i=0;$i<10; $i++)
  {
    print $i;
  }
print $i; # $i is zero, my code expected 9

来自为什么当我重新声明 Perl foreach 控制变量时没有收到警告?我了解这种行为是意料之中的;除非重新声明在同一范围内,否则我不应该收到警告。

但是,我不明白为什么会这样。为什么 perl 不会在这里发出警告?在我看来,这可能是导致错误的原因,而且通常不是故意的。是否有一些常见的情况,这是正常的编程风格,所以警告会很烦人?

4

1 回答 1

7

Perl 不会对样式问题发出警告,但我很难相信有人会故意在不同的作用域深度上使用相同的 var 名称。

唯一想到的可能有用的情况是

{
    my $x = $x;
    ... do some something that changes $x ...
}
# $x is restored here.

从好的方面来说,有一个规则可以识别这样的问题。perlcritic

于 2013-05-02T14:25:56.473 回答