作为一个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不会在这里发出警告?在我看来,它可能是错误的原因,通常不是故意的。是否有一些常见的情况,这是正常的编程风格,所以警告会很烦人?
答案 0 :(得分:7)
Perl并不倾向于警告样式问题,但我发现很难相信有人会故意想在不同的范围深度拥有相同的var名称。
唯一可能有用的案例是
{
my $x = $x;
... do some something that changes $x ...
}
# $x is restored here.
另一方面,有perlcritic
rule来识别此类问题。