perl学习笔记-解引用小结

目前正在自学perl,看到关于dereference的一些写法:

@array1 = qw /a b c/;

@array2 = qw /d e f/;

@array = {/@array1, /@array2};

$array_ref = /@array;

 

假如要访问array1中的第2个元素,可以有如下几种写法:

$array[0][1]                                   写法一

${$array_ref}[0][1]                       写法二

$$array_ref[0][1]                           写法三

$array_ref->[0]->[1]                      写法四

$array_ref->[0][1]                         写法五

 

写法二或许是初学者不熟悉perl时使用的方法,先写出写法一,然后用数组引用{$array_ref}代替数组名array即可得到写法二。

这里应用了perl中数组名和数组引用相互替换的规则。

写法三是写法二的改进,也是另一个规则的应用,即括号中如果是标量,则可以省略括号。

写法四也是对写法二的改进,可以使用->来取代{},以此方便使用。

写法五是对写法四的改进,即省略->,使得表达形式更加简介紧凑。

 

这里有人可能会问为什么写法五中的第一个->不能省略?

其实很简单,如果省略了第一个->,那么就变成了$array_ref[0][1],此时perl就会把array_ref误认为是数组。

可以说第一个->是perl区分数组和数组引用的辨别标准:

$array[0][1]               无->,因此array是数组

$array->[0][1]           有->,因此array是数组的引用

 

那么可能又会有人质疑, $array_ref->[0] == /@array1,也是引用啊,为什么可以省略第二个->,而把

$array_ref->[0]->[1] 写成$array_ref->[0][1]呢?

这样的话,如何能区分$array_ref->[0]是数组还是引用呢?

 

呵呵,原因就在于perl中的数组中是不包含数组的,因此如果你看到有两个[],那么第一个方括号一定是一个引用。

 

总结如下: 第一个方括号之前可以是数组也可以是引用

$array[0]              array是数组

$array->[0]           array是数组的引用

 

第一个方括号之后的任意一个元素都是一个引用(当然最后一个方括号所代表的元素未必是)

例如:$array->[0][3][1][5]中

 

$array->[0],$array->[0][3],$array->[0][3][1]都是引用。

 

 

 

 

 

 

 

 

 

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值