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

perl中->和=>作用

发布时间:2020-12-16 00:09:31 所属栏目:大数据 来源:网络整理
导读:- 有两种用法,都和解引用有关。? ? 第一种用法,就是解引用。? 根据 - 后面跟的符号的不同,解不同类型的引用,? -[] 表示解数组引用,-{} 表示解散列引用,-() 表示解子程序引用。? 例子:? $arr_ref = /@array;? $arr_ref-[0] 访问数组 @array 的第一个元

-> 有两种用法,都和解引用有关。?

?

第一种用法,就是解引用。?

根据 -> 后面跟的符号的不同,解不同类型的引用,?

->[] 表示解数组引用,->{} 表示解散列引用,->() 表示解子程序引用。?

例子:?

$arr_ref = /@array;?

$arr_ref->[0] 访问数组 @array 的第一个元素。?

$hash_ref = /%hash;?

$hash_ref->{foo} 访问 %hash 的 foo 分量?

$sub_ref = /&test;?

$sub_ref->(1,2,3) 使用参数列表 (1,3) 来调用 &test 这个子程序。?

?

第二种用法,就是调用类或者对象的方法。?

格式:?

$obj->method();?

或者?

ClassName->method();?

例如:?

$pop3->login( $username,$password );?

my $ftp = Net::FTP->new("some.host.name",Debug => 0);?

这两种用法略有不同,?

但是总的来说,符合以下规则:?

引用:[color=red]假设 -> 的左操作数(就是左边那个值,如 $pop3 和 Net::FTP)是 $left,右操作数(就是右边那个值,如 login 和 new)是 $right,那么 -> 的运算规则就是:?

?

if ( ref $left 有效 ){?? ?# 也就是说 $left 是个引用,而不是个裸字

?

? ? $ClassName = ref $left; ?# 取引用的类型,当作类名称

?

}

?

else{

?

? ? $ClassName = $left; ? ? ? # 直接把裸字当作类名称

?

}?

?

然后调用:?

&{$ClassName::$right}( $left,原参数列表 )?

也就是说把类名称和右操作数拼在一起,当作子程序名称(注),并把左操作数当作第一个参数。?

?

注:Perl 解释器要做的工作其实要比这复杂,它还要考虑到继承的问题。??

?

=>作用

当给 hash 赋值时,有时并不明显哪些元素是 keys,那些是 values。例如,在下面的赋值中,我们需要仔细的计数,“ key,value,key,…”,来判断2.5 是key 还是 vlaue:

%some_hash = ( “ foo”,35,“ bar”,12.4,2.5,“ hello”,“Wilma”,1.72e30,“ betty”,“ bye/n” );

?

如果 Perl 能提供一种方法,让我们轻易的辨别出哪一个是 key,哪一个是 value,那该有多好?Larry 也想过这个问题,因此发明了大箭头符号(=>)◆。对于 Perl 来讲,其作用和和逗号(,)类似,因此有时称作 “ 胖逗号(fat comma)” 。Perl 语法中,在需要逗号(,)的时候,都可以使用大箭头符号替换;对于 Perl来讲,它们是一样的◆。下面是给 hash 赋值的另一种方法:

?

◆是的,还有小箭头(->)。它和引用一起使用,这是高级话题。如果你准备好了,可以参见perlreftut 和perlref 的帮助手册

◆它们在技术上还是有一点不同:任何大箭头符号(=>)左侧的 bareword(由字母,数字,下划线,但不是由数字开头,前面有可选的加号或减号, 组成的序列)都暗含着由引号括起来了的。因此可以省略掉大箭头符号(=>)左侧bareword上的引号。你也可以忽略掉hash的花括号中的引号,如果里面只有作为key的bareword.

?

my %last_name = (

“fred” => “flintstone”,

“dino” => undef,

“barney”=> “rubble”;

“betty”=> “rubble”,

);

?

上面代码中,很容易辨别出哪一个是 key,哪一个是 value。注意列表中最后一个逗号。我们早期讨论过,这个逗号是没什么用的,但有时能给我们带来方便;如果我们要加入新的元素到 hash 中,我们只需知道每一行都有 key/value 对,结尾有逗号。Perl 会查看不同元素之间的逗号,以及列表结尾处的逗号(此逗号非必需的)

??

原文见: http://blog.sina.com.cn/s/blog_5f8e03960100x0si.html

(编辑:李大同)

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

    推荐文章
      热点阅读