PERL<引用1>
发布时间:2020-12-15 23:49:33 所属栏目:大数据 来源:网络整理
导读:[oracle@jhoa 2]$ cat a2.pl foreach $key (keys %main::) {print "$$key =$main::{$key}n";}[oracle@jhoa 2]$ perl a2.pl $/ =*main::/$stderr =*main::stderr$key =*main::key$utf8:: =*main::utf8::$" =*main::"$CORE:: =*main::CORE::main包内容: Perl
[oracle@jhoa 2]$ cat a2.pl foreach $key (keys %main::) {print "$$key => $main::{$key}n";} [oracle@jhoa 2]$ perl a2.pl $/ => *main::/ $stderr => *main::stderr $key => *main::key $utf8:: => *main::utf8:: $" => *main::" $CORE:: => *main::CORE:: main包内容: Perl 本地变量; 一个是my 一个是local Perl 的my操作符用于创建词法作用域变量。通过my创建的变量,存活于声明开始的地方,直到闭合作用域结尾。 闭合作用域指的可以是一对花括号中的区域,可以是一个文件,也可以是一个eval字符串。 闭合作用域是词法作用域,仅在编译时对程序源代码扫描过程中确定。 [oracle@jhoa 2]$ perl a4.pl 1-----2.7183 2-----3.1415926 [oracle@jhoa 2]$ cat a4.pl $a = 3.1415926; ##全局变量 { my $a = 2.7183; ##词法的 print "1-----$an"; } print "2-----$an"; [oracle@jhoa 2]$ perl a4.pl 1-----2.7183 2-----3.1415926 这里花括号外面用到的变量$a是全局变量$a,而在花括号内部的$a是词法变量$a,它的作用域仅限于花括号内。 my变量不存在与符号表中 local 的运行时作用域: local在运行时起作用 my编译时起作用 my创建了不同的变量,而local只是将已存在的变量值暂时保存起来 [oracle@jhoa 2]$ cat a4.pl $a = 3.1415926; ##全局变量 { local $a = 2.7183; ##词法的 print "1-----$an"; } print "2-----$an"; [oracle@jhoa 2]$ perl a4.pl 1-----2.7183 2-----3.1415926 通常情况下,我们应该用my,理由之一是my比local快,因为local将值存入栈的操作,是需要消耗时间的。 [oracle@jhoa 2]$ cat a5.pl my @a = (a,b,c,d); local ($a,$b,$c) = @a; ##@a中的前3个元素 print "$a is $an"; print "$b is $bn"; print "$c is $cn"; [oracle@jhoa 2]$ perl a5.pl $a is a $b is b $c is c 若非必要请勿直接使用@_ [oracle@jhoa 2]$ cat a6.pl sub digits_gone { my ($str) = @_; $str =~ tr/0-9//d; ##删除字符窜中的数字 print "$str is $strn"; } digits_gone (aaaaa,bbbbb,cccccc); [oracle@jhoa 2]$ perl a6.pl $str is aaaaa 子程序的参数都是通过数组变量@_传递的。 数组的引用: sh-3.2$ cat 2.pl {my @a ="a b c d e f g";$b=@a;} print "$bn"; {my @a ="a b c d e f g";$b=@a;} print "@$bn"; {my @a ="a b c d e f g";$b=@a;} print "@{$b}n"; sh-3.2$ perl 2.pl ARRAY(0x9e9a080) a b c d e f g a b c d e f g 数组元素的引用: sh-3.2$ cat 5.pl my @a = qw/1 2 3 4 5 6/; {my @a = qw/1 2 3 4 5 6/; $b=@a;} print "$$b[1]n"; {my @a = qw/1 2 3 4 5 6/; $b=@a;} print "$b->[1]n"; sh-3.2$ perl 5.pl 2 2 hash引用: [oracle@jhoa 3]$ cat 2.pl {my %a =(a=>1,b=>2,c=>3) ;$b=%a;} print "$bn"; {my %a =(a=>1,c=>3) ;$b=%a;} print %$b; [oracle@jhoa 3]$ perl 2.pl HASH(0x7013080) c3a1b2[oracle@jhoa 3]$ 函数引用: [oracle@jhoa 3]$ cat 3.pl sub printlog { print "xxxxxxxn"; } {my $a=&;printlog;print "$an"}; {my $a=&;printlog;print &$a}; [oracle@jhoa 3]$ perl 3.pl CODE(0xc1b0080) xxxxxxx 1[oracle@jhoa 3]$ 1 是函数的返回值: 简单变量的引用: sh-3.2$ cat 4.pl {my $a ="a";$b=$a;} print "$bn"; {my $a ="a";$b=$a;} print "$$bn"; {my $a ="a";$b=$a;} print "${$b}n"; sh-3.2$ perl 4.pl SCALAR(0x168fb060) a a (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |