perl中子程序中参数的两种引用(传递)方式介绍
转载自:http://www.aspzz.cn/article/34392.htm 这里主要讨论的是当你要传递的参数不是仅仅一个的时候,也就是两个以上,并且他们数据的类型还不一致的时候,我们要遇到的问题
下面是一个例子:
复制代码代码如下:
use strict; #这里是两个数组 my @i =('1','2','3'); my @j =('a','b','c');
#在进行处理之前,我们把他们先打印出来,看一看他们的样子 #然后我们通过子程序进行处理 得到的结果如下:?
复制代码代码如下:
F:&;perla.pl In main program before calling subroutine:i=1 2 3 In main program before calling subroutine:j=a b c In subroutine:i=1 2 3 a b c in subroutine:j= In main program after calling subroutine:i=1 2 3 In main program after calling subroutine:j=a b c F:&; 在这个例子中,子程序中有两个参数@i和@j,当我们将这两个参数传递到子程序的时候,子程序将他们全部放入了内置数组@_中,然后在@_中@i和@j的不同没有了,也就是在@_中混为一谈了,无法区分。当我们想重新得到他们两个的时候,我们发现,@i=1 2 3 a b c,而@j为空。在很多时候这显然不是我们想要得到的结果,所以我们要用到pass by reference(在大骆驼书第六章中被翻译为”传入引用“) 我们仅仅把代码做一个变动,也就是在 程序如下: 复制代码代码如下: use strict;
#这里是两个数组 #在进行处理之前,我们把他们先打印出来,看一看他们的样子 #然后我们通过子程序进行处理 结果如下: 复制代码代码如下: F:&;perla.pl In main program before calling subroutine:i=1 2 3 In main program before calling subroutine:j=a b c In subroutine:i=1 2 3 in subroutine:j=a b c In subroutine:the third element is c In main program after calling subroutine:i=1 2 3 4 In main program after calling subroutine:j=b c F:&; 我们可以观察最后的结果, 在调用了子程序以后@i的值发生了变化:i=1 2 3 4 而j=b c。也就是说我们在子程序中对数组进行的push和shift操作在主程序中起了作用。 为什么会出现这种情况呢? 一般来说,我们在子程序中对变量进行了my声明,也就是只会在子程序中起作用,而不会改变主程序中的值。 在这里由于引用的是真实的参数,也就是主程序中的值,而不是它的备份,所以会得到相应的改变。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |