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]都是引用。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |