Perl子程序局部全局问题
Perl subroutine local global issue
对于这个小代码,它总是在全局代码块中打印@x 的值。如果我不小心没有在没有 'my @x' 的子例程中初始化变量,如何发出警告?我不想在子例程中将局部变量作为 @x.
use strict;
use warnings;
my @x=qw/1 2 3/;
&mysub();
sub mysub{
print "@x";
}
用普通的 Perl 是做不到的。解决方案是不要在较小的范围内重复使用相同的变量名称。
如果您想以编程方式强制执行此操作,可以使用 Perl::Critic. The policy Perl::Critic::Policy::Variables::ProhibitReusedNames 告诉您是否重复使用了已在外部作用域中定义的变量名。
更好地组织代码。
use strict;
use warnings;
sub mysub{
print "@x";
}
{
my @x=qw/1 2 3/;
mysub();
}
通过适当地本地化变量,不小心引用错误变量的情况不会改变。
不要使用这种无意义的变量名。
偶然访问@frobs_by_name
的可能性很小。
对于这个小代码,它总是在全局代码块中打印@x 的值。如果我不小心没有在没有 'my @x' 的子例程中初始化变量,如何发出警告?我不想在子例程中将局部变量作为 @x.
use strict;
use warnings;
my @x=qw/1 2 3/;
&mysub();
sub mysub{
print "@x";
}
用普通的 Perl 是做不到的。解决方案是不要在较小的范围内重复使用相同的变量名称。
如果您想以编程方式强制执行此操作,可以使用 Perl::Critic. The policy Perl::Critic::Policy::Variables::ProhibitReusedNames 告诉您是否重复使用了已在外部作用域中定义的变量名。
更好地组织代码。
use strict; use warnings; sub mysub{ print "@x"; } { my @x=qw/1 2 3/; mysub(); }
通过适当地本地化变量,不小心引用错误变量的情况不会改变。
不要使用这种无意义的变量名。
偶然访问
@frobs_by_name
的可能性很小。