Why don't I get a warning when I redeclare the Perl foreach control variable?

前端 未结 2 1639
深忆病人
深忆病人 2021-01-11 19:42

Why is there no warning thrown for the redeclaration of $i in the following code?

#!/usr/bin/perl

use strict;
use warnings;
use Data::Dumper;

         


        
2条回答
  •  心在旅途
    2021-01-11 20:21

    Actually, you only get warnings for redefinitions in the same scope. Writing:

    use warnings;
    my $i;
    {
      my $i;
      # do something to the inner $i
    }
    # do something to the outer $i
    

    is perfectly valid.

    I am not sure if the Perl internals handle it this way, but you can think of your for loop as being parsed as

    {
      my $i;
      for $i ( ... ) { ... }
      # the outer scope-block parens are important!
    };

提交回复
热议问题