Perl use strict 控制变量


use strict 的影响:

[root@june2 perl]# cat 5.pl 
#!/usr/bin/perl
use strict;
@array=qw/1 2 3 4 5 6 7 8/;
foreach my $var (@array){print "$var
"};

[root@june2 perl]# perl 5.pl 
Global symbol "@array" requires explicit package name at 5.pl line 3.
Global symbol "@array" requires explicit package name at 5.pl line 4.
Execution of 5.pl aborted due to compilation errors.

[root@june2 perl]# cat 5.pl 
#!/usr/bin/perl
use strict;
our @array=qw/1 2 3 4 5 6 7 8/;
foreach my   $var (@array){print "$var
"};

[root@june2 perl]# perl 5.pl 
1
2
3
4
5
6
7
8


[root@june2 perl]# cat 5.pl 
#!/usr/bin/perl
use strict;
my @array=qw/1 2 3 4 5 6 7 8/;
foreach  $var (@array){print "$var
"};

[root@june2 perl]# perl 5.pl 
Global symbol "$var" requires explicit package name at 5.pl line 4.
Global symbol "$var" requires explicit package name at 5.pl line 4.
Execution of 5.pl aborted due to compilation errors.

这意味着从这里开始到闭合范围结尾的这个区间里,任何变量要么是一个词法范围变量, 要么是一个明确声明允许
使用的全局变量。如果两者都不是,将导致编译错误。如果下列 之一为真,则一个全局变量是明确允许使用的:
它是 Perl 的程序范围内的特殊变量之一(参阅第二十八章)。
它带有包括其包名字的全称(参阅第十章)。
它被输入到当前包(参阅第十一章)。
它通过一个 our 声明伪装成了一个词法范围的变量。(这是我们向 Perl 中 增加 our 声明的主要原因。)
当然,还有第五种可能——如果该用法让人觉得烦,只需要在内层块里用下面语句取消掉它:
no strict 'vars';
你还可以利用这个用法打开对符号解引用和光字的随机使用的严格检查。通常人们只是说:
use strict;
这样就把三个检查都打开了。参阅第三十一章的 use strict 部分获取更多信息。

原文地址:https://www.cnblogs.com/hzcya1995/p/13351975.html