编译指令–use strict
当程序较长时,由于疏忽可能会出现同一个变量名多次被声明:
- 如果没有
use strict
Perl 会默认后一个声明的覆盖先前声明的变量 - 加上
use strict
后,如果出现同一个变量名多次被声明,编译的时候会给出警告
词法变量–my
- 如果在程序开头加上
use strict
,那么在程序的任何位置,每次要声明一个新的变量,必须要加上my
- 在子程序中声明的变量,如果未出现在任何其他任何语句块中,那么这个变量就是私有的
my
操作符不加括号时,只能用来声明单个词法变量
my $fred, $barney; #没声明$barney
my ($fred, $barney); #两个都声明了
my
在子程序创建的私有变量,每次调用这个子程序时,这个私有变量都会被重新定义,如果想让这个私有变量承接之前的值,则要用到 state
持续性私有变量–state
state
声明的变量,可以在子程序多次调用期间,保留变量之前的值,并将变量的作用域局限于子程序内容部
1 use strict;
2
3 sub var_my{
4 my $num += 1;
5 print "The value of \$num is: $num\n";
6 }
7
8 var_my;
9 var_my;
10 var_my;
11 var_my;
}
输出结果为:
1 use 5.010;
2
3 sub var_state{
4 state $num = 0;
5 $num += 1;
6 print "The value of \$num is: $num\n";
7 }
8
9 var_state;
10 var_state;
11 var_state;
12 var_state;
输出结果为:
值得注意的是,state $num = 0
只有在子程序第一次被调用的时候有效,在后续调用时,这个表达式会被直接忽略