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

ten*_*red 7 perl

作为一个perl新手,我只是碰到了一个我意外做了类似的事情(示例简化):

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

重新声明Perl foreach控制变量时,为什么不收到警告?我明白这种行为是可以预料的; 除非重新声明属于同一范围,否则我不应该收到警告.

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

ike*_*ami 7

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

想到的唯一可能有用的案例是

{
    my $x = $x;
    ... do some something that changes $x ...
}
# $x is restored here.
Run Code Online (Sandbox Code Playgroud)

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