0

如果 Perl 子例程使用全局变量,有没有办法生成警告?

#!/usr/bin/perl -w  
use strict;
my $GlobalVariable;

#  Main Start

#  Main End

sub  MyFunction
{
    my $LocalVariable;
    $GlobalVariable=1;

}

在这段代码中,Perl 中是否有警告MyFunction()正在使用$GlobalVariable

4

3 回答 3

2

标准做法是use strict 'vars';. 在你输入这个之后,你必须完全限定全局变量(例如$main::GlobalVar),否则 Perl 会抛出一个编译时错误。

于 2012-04-26T21:58:32.647 回答
1

如果您的意思是“警告 Perl 代码是否使用任何全局变量”,我认为目前没有预定义的方法可以做到这一点。

如果您只想禁止使用任何非标准 Perl 全局变量,您可以使用 CPAN 中的 Devel::FindGlobals 之类的东西来获取所有全局变量,然后在定义了任何非标准全局变量时发出警告。

于 2012-04-27T12:12:11.657 回答
1

是的,use strict除非您明确将其声明为本地或全局或完全限定其名称,否则它将捕获访问任何变量的尝试。您可以尝试tie访问 current 的包全局范围(毕竟它是一个哈希)以捕获对已声明变量的访问,但不建议这样做,因为这样做有很多正当理由(例如来自 的所有好东西perlodc perlvar) .

于 2012-04-26T21:59:34.400 回答