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

PERL中的私有变量

发布时间:2020-12-16 00:07:06 所属栏目:大数据 来源:网络整理
导读:?? 默认情况下,PERL中所有的变量都是全局变量,也就是说在程序中的任何地方都可以访问他们,但是你也可以随时用一个操作符来创建私有的词法变量,即my sub max { ???? my($m,$n)=@_; ???? if($m$n) ??? print $m; ??? else ??? print $n; } 使用my操作符限

?? 默认情况下,PERL中所有的变量都是全局变量,也就是说在程序中的任何地方都可以访问他们,但是你也可以随时用一个操作符来创建私有的词法变量,即my

sub max

{

???? my($m,$n)=@_;

???? if($m>$n)

??? print $m;

??? else

??? print $n;

}

使用my操作符限定过的变量,其作用域只在其所在的代码块中有效,不被其他代码访问,另外,PERL中允许最后一个语句块省略分号,但是,还是别用了,不能很好地养成好的

编码习惯

更好的方式是在使用参数之前,进行参数的检测,比如,看下是否传递进来的是两个参数

sub max
{
?? ?if(@_!=2){
?? ???? print? "warn the param is not propley";#有一点要注意的是,在if语句之后最好加上花括号,作为代码块的起始和结束标记,这样不怎么容易出问题
?? ???? }
?? ?my($m,$n)=@_;
?? ?
?? ?if(@_[0]>$n)
?? ?{
?? ??? ?print $m;
?? ??? ?}
?? ?else
?? ?{
?? ??? ?print $n;
?? ??? ?}
}
&max(3,4);

当然最好的情况是程序能够自行处理可变参数的参数列表,代码如下:

sub max
{
?? ?#首先获得参数列表中的第一个值,作为其实最大值
?? ?my $max_so_far=shift @_;
?? ?foreach(@_)
?? ?{

??????? #未使用指定遍历列表的控制变量时,自动使用默认变量,$_

?? ???? if($max_so_far<$_)
?? ??? ?{
?? ??? ??? ?$max_so_far=$_;
?? ??? ?}
?? ?}
?? ?print $max_so_far;

}
&max(3,4,5);

如果使用该函数的人将空列表传入程序,作为参数列表,我也没有关系,这样的话,$max_so_far是undef,而foreach循环则根本不执行

现在说下词法变量my,即类似于C中的作用域限定符,

书中说my操作符当不是用小括号时,只是声明了一个变量,

my $fred=1,$h=3;这样的话$h是可以使用的,不知道怎么理解,暂时不作处理

PERL中所有新的变量,标量的初始值是undef,列表的初始值是空列表

(编辑:李大同)

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

    推荐文章
      热点阅读