清新的Perl(七)——引用

前一篇博文中我讲了Perl函数的四个要点,对于初学者来说最先搞懂这四个要点,就可以用perl语言写一些简单的通用方法了(还请大家根据上篇的四个要点重点学习和阅读书籍材料)。而若想更加熟练的使用Perl函数,以及后续使用CPAN上的各种库,“引用”这道坎是必须要迈过去的。

说到引用,各大教材往往会先说符号引用,再说硬引用。在这里要说下,都2019年了,符号引用是老古董了,Perl5已经到5.30版本了(大部分通行的中文书籍,写的时候才5.10或是5.14版本,05年-09年时期的)。不要再一头扎进去先看符号引用了。重点要搞懂的是硬引用。

硬引用,是一个标量,记住是一个标量,代表的是变量内存地址

引用(以后泛指硬引用),广泛使用在数组和散列作为参数传递给函数,或者函数返回值两个方面。

#其使用方法也相当的简单,下面是一个数组变量和散列变量:
my @array;
my %hash;
#引用的表示方法:
$array_address = \@array; #获取数组变量的地址
$hash_address = \%hash;   #获取散列变量的地址

#如果我们从地址中重新获取变量怎么办呢:
@$array_address #表示数组变量和@array等价
%$hash_address #表示散列变量和%hash等价

在这里,有一个小提示,在CPAN上阅读模块的文档资料时,经常会出现单词reference,该单词就是引用的英文表达,说ref(简写,通常出现在变量名称中)或者reference通常情况下就是讲的引用。

一、作为参数的引用

前一章节中我已经讲过了Perl语言中函数传递的原理,是使用了一个数组变量@_。@_这个变量数组,具有十分强大的整合能力——这个意思是说,如果你函数的参数,传入的是两个数组变量,会被整合为一个数组@_。如果传入的是几个标量变量和几个数组,同样会被整合为一个数组@_。

当你真正要在函数内部使用时候数组变量的时候,你会发现,你根本无法分清在@_里的元素,哪些是原来的标量,哪些是原来数组的元素。

为了解决这个问题,我们就需要使用引用。通过将一个数组的内存地址作为标量直接传递到函数中,以此保证数组的完整性。

二、函数返回值

通常,作为初学者,不会需要设计一个函数返回一个引用。但是,cpan中的很多库,会用这种方式返回数据,最常用的是数据库查询返回值。

标签