全局变量:不加说明的变量为全局变量,在子程序中改变会覆盖已有的值。 局部变量包含my 和local 局部变量my:用my说明的变量如my $a; my定义的变量只在该子程序中存在。 My定义的变量在程序块内存在,包括在程序块内部定义的程序块也可见。在程序块外销毁。如果在主程序开头定义时相当于全局变量。 程序块是由{}包含的语句,if,while,sub都可以定义程序块。 my($a,$b)和my $a,$b不一样。 前者表示 局部变量 后者表示 $a是局部变量,$b是全局变量 local定义的变量不存在于主程序中,但存在于该子程序和该子程序调用的子程序中 sub spoof { local ($value) = "temporary"; tellme(); } sub tellme { print "Current value is $value\n"; } 用my时$value只存在于spoof中,tellme是另一个块,其中的$value中不同的变量。用local变量可在调用的子程序中出现,可以打印出值 。 local 在本块内改变全局变量的值如$/。出了块就恢复。内部变量不能用my声明。 [oracle@jhoa perl2]$ cat a4.pl sub spoof { local $value = "temporary"; tellme(); } sub tellme { print "Current value is $value\n"; } spoof; [oracle@jhoa perl2]$ perl a4.pl Current value is temporary 此时用my 就打印不出来了 [oracle@jhoa perl2]$ cat a4.pl sub spoof { my $value = "temporary"; tellme(); } sub tellme { print "Current value is $value\n"; } spoof; [oracle@jhoa perl2]$ perl a4.pl Current value is My 程序块内可见,同级块可见 Local 调用的子程序里也可见