为什么在内部范围内重新声明变量时perl不会发出警告?

时间:2013-05-02 12:51:13

标签: perl

作为一个perl新手,我只是碰到了一个我不小心做了一些错误的例子(例如简化):

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

Why don't I get a warning when I redeclare the Perl foreach control variable?我明白这种行为是预期的;除非重新声明属于同一范围,否则我不应该收到警告。

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

1 个答案:

答案 0 :(得分:7)

Perl并不倾向于警告样式问题,但我发现很难相信有人会故意想在不同的范围深度拥有相同的var名称。

唯一可能有用的案例是

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

另一方面,有perlcritic rule来识别此类问题。