加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

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




(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读