perl中-〉和=〉用法

 

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

 

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

 

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

 

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

 

例子:

 

$arr_ref = /@array;

 

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

 

$hash_ref = /%hash;

 

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

 

$sub_ref = /&test;

 

$sub_ref->(1, 2, 3) 使用参数列表(1,2,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,value,…” ,来判断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 来讲,其作用和和逗号(,)类似,因此有时称作 “ 胖逗号(fatcomma)” 。Perl 语法中,在需要逗号(,)的时候,都可以使用大箭头符号替换;对于Perl来讲,它们是一样的◆。下面是给 hash 赋值的另一种方法:

 

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

 

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

 

my %last_name = (

 

fred => flintstone,

 

dino => undef,

 

barney=> rubble;

 

betty=> rubble,

 

);

 

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

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值