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 に答える