perl 为什么我没有收到这个警告:“变量屏蔽了前面的声明”?

wr98u20j  于 8个月前  发布在  Perl
关注(0)|答案(2)|浏览(69)

这是我的整个脚本,精心制作,包括两个变量具有相同的名称,其中一个是掩蔽另一个:

#!/usr/bin/env perl
use strict;
use warnings;

my $hi = "First hi";
print "$hi\n";

{
    my $hi = "Second hi";
    print "$hi\n";
}

print "$hi\n";

如果我运行这个脚本,我会得到这样的输出,并且明显没有警告:

First hi
Second hi
First hi

如果我删除第二个$hi变量周围的花括号,使其与第一个$hi变量处于相同的作用域中,我会得到以下警告:

"my" variable $hi masks earlier declaration in same scope at hi.pl

但是,即使变量不在同一作用域中,我也希望得到此警告。每当变量名隐藏另一个变量时,我都希望得到此警告。如何启用此警告?是否可以启用Perl Critic策略来警告我这一点?

z9gpfhce

z9gpfhce2#

可能的原因是:

my $a = 1;
# ...
{
   my $a = 2;
   # ...
}
# ...

可能有道理,而

my $a = 1;
# ...
my $a = 2;
# ...

并不代表。
您也可以提交一个增强请求来获取关于第一种情况的警告(就像gcc对C所做的那样)。

相关问题