带有一点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不会在这里发出警告?在我看来,这可能是一个错误的原因,通常不是有意的。有一些常见的情况,这是正常的编程风格,所以警告会很烦人?
@Mat - 更可能的是,这样的代码是手动重构过程中出现错误的结果,而不是通过设计。例如。更可能是一个错误比预期的东西。 – DVK 2013-05-02 13:02:39
杜。而且由于人们有时会做他们不打算做的事情,编译器会有警告。 – innaM 2013-05-02 13:02:43
@Mat:'my $ foo; my $ foo;'也会用'my'显式地请求一个新变量,但是Perl仍然会发出警告_“my”变量$ foo会在同一个scope_中掩盖前面的声明。这不仅仅是“你正在提出明确的要求”。 – 2013-05-02 14:40:48