一、子程序的引用:
Perl中不仅可以对标量变量、数组变量、哈希变量建立引用,而且也可以对子程序建立引用;子程序的引用类似于C/C++中的函数指针;构造方法如下:
$Pointer_to_Sub = sub { #函数体 };
这样就建立了一个对匿名子程序的引用;通过子程序引用调用子程序的语法如下
&$Pointer_to_Sub(参数列表);
1、子程序模板:
有时候可以通过子程序返回不同的子程序引用,可以创建一系列不同的子程序,这样就可以把操作模板化,这类似于C/C++中的回调函数,即 CALLBACK函数;
2、数组与子程序:
由于数组@_是一个一维数组,所以,不管逆传递多少个数组给子程序,Perl解释器都会把你传递的数组都转换成标量值,然后按照你传递的顺序把这些标量值存储到数组@_中;同样,在返回值中,如果返回的是一个数组,那么,不管逆包装多少个子数组到一个列表中,Perl解释器都会把这些子数组转换成标量值,然后存储到一个一维数组中,供子程序返回;因此,如果按照形如 my (@a,@b) = @_;形式的语句来获取参数列表值的时候,全部数组值都被赋值给数组@a,而数组@b则为空数组;这都是因为数组@_是个一维数组;
所以,在传递数组给子程序的时候,要注意以下几点:
◆ 当传递给子程序的参数是多个数组时,一定要使用数组的引用;
◆ 不要试图在子程序中使用形如 (@Array1,@Array2,。。。,@ArrayN) = @_;的语句处理参数,除非想要
把所有参数集中到一个长的数组中;