来源:互联网 发布:淘宝刷信用卡套现 编辑:程序博客网 时间:2024/03/29 17:26
[root@wx03 5]# cat test1.plsub fun1 {   $var=100;#   return $var;};$var=10;print "first..........\n";print "\$var is $var\n";print "second...........\n";&fun1;print "\$var is $var\n";[root@wx03 5]# perl test1.plfirst..........$var is 10second...........$var is 100没有使用包的时候 函数里的全局变量 会覆盖当前$var同名变量:[root@wx03 5]# cat test1.pmpackage test1;sub new {my $invocant = shift;my $self={};my $class = ref($invocant) || $invocant;bless $self, $class;return $self;};sub fun1 {my $self=shift;  $var=300;  return $var;};1;[root@wx03 5]# cat test1.plsub fun1 {   $var=100;#   return $var;};$var=10;print "first..........\n";print "\$var is $var\n";print "second...........\n";&fun1;print "\$var is $var\n";use test1;my $ua=test1->new();my $str=$ua->fun1;print $str;print "\n";print "third............\n";print "\$var is $var\n";[root@wx03 5]# perl test1.plfirst..........$var is 10second...........$var is 100300third............$var is 100此时包里的变量不会覆盖外面的变量:[root@wx03 5]# cat test1.pmpackage test1;sub new {my $invocant = shift;my $self={};my $class = ref($invocant) || $invocant;bless $self, $class;return $self;};our $Version=199;sub fun1 {my $self=shift;our  $var=300;  return $var;};1;[root@wx03 5]# cat test1.pm package test1;sub new {my $invocant = shift;my $self={};my $class = ref($invocant) || $invocant;bless $self, $class;return $self;};my $Version=199;  ##此处必须是全局变量sub fun1 {my $self=shift;our  $var=300;  return $var;};1;所有随后的标识符(包括那些用 our 声明的,但是不包括那些用 my 或者那些用其他包名字修饰的的变量。)都将放到属于当前包的符号表中。(用 my 声明的变量独立于包;它们总是属于包围它们的闭合范围,而且也只属于这个范围,不管有什么包声明。)use 是加载一个 .pm 文件,package 是切换当前名字空间,our 是在当前名字空间中创建一个变量,如果该变量已经存在,则 our 只起到一个声明的作用。 ------------------------------------------------------------------------------------ our (或者什么修饰都没有)声明的是“包全局变量”,它的是“依附”在“包”上面的,它的存储位置是“包符号表”,my 声明的是“词法变量”,它是“依附”在“代码块”上的,它的存储位置是“代码块”的“变量标签薄”,所以词法变量不可以从代码块之外访问(除了传递引用)。但是包全局变量就不同了,用全限定就可以访问。10.1  符号表:[root@wx03 5]# cat t1.pl $ref=*var;$var=10;print "first..........\n";print $$ref;print "\n";@var=qw/a1 b2 c3 d4/;print @$ref;print "\n";[root@wx03 5]# perl t1.pl first..........10a1b2c3d4[root@wx03 5]# cat t1.pl *ref=*var;$var=10;print "first..........\n";print $ref;print "\n";@var=qw/a1 b2 c3 d4/;print @ref;print "\n";[root@wx03 5]# perl t1.pl first..........10a1b2c3d410.2  自动装载:

0 0
原创粉丝点击