Perl语言中Perl函数返回值问题解析

本文和大家重点讨论一下Perl函数返回值问题,在Perl语言中,return语句可以返回一个标量值或者一个列表,这个标量值可以是一个变量,或者一个表达式的最后求值。

Perl函数返回值

在Perl语言中,return语句可以返回一个标量值或者一个列表,这个标量值可以是一个变量,或者一个表达式的最后求值,如:return1;<===>return(1);return$a+$b;<===>return($a+$b);
然后,一个Perl函数返回值,并不止一个,有的时候会有多个值需要返回,这是就要用到列表,这个列表可以包含多个变量值。

一、单一变量的Perl函数返回值

#Functiondefinition.  


subget_value()  


{  


my$var;  



$var=1;  



return($var);  


}  


#########Mainscript  


my$result;  



$result=get_value();  




print"\$result=$result\n";  



#######printresultis:  



$result=1;  

二、多个标量的Perl函数返回值

#Functiondefinition.  


subget_value()  


{  


my($var_a,$var_b);  



$var_a=1;  




$var_b=2;  



return($var_a,$var_b);  


}  


#########Mainscript  


my($result_a,$result_b);  


($result_a,$result_b)=get_value();  



print"\$result_a=$result_a\n\$result_b=$result_b\n";  



#######printresultis:  



$result_a=1;  




$result_b=2;  



 

三、数组的Perl函数返回值

#Functiondefinition.  


subget_value()  


{  


my(@$var_a,@var_b);  



@var_a=(1,2);  




@var_b=(30,40);  



return(@var_a,@var_b);  


}  


#########Mainscript  


my(@result_a,@result_b);  


(@result_a,@result_b)=get_value();  



print"\@result_a=@result_a\n\@result_b=@result_b\n";  



#######printresultis:  



@result_a=1,2,30,40  




@result_b=  



#!!!在这里,我们原本希望得到的结果应该是:  



@result_a=1,2  




@result_b=30,40  

但实际上却并不是这样,这里一点需要注意的是:Perl函数返回值中的列表是被“铺平(flattened)的”,也就是说:
return(@var_a,@var_b);<====等价===>return($var_a[0],$var_a[1],$var_b[0],$var_b[1]);

所以这个时候,return将会把returnlist里面的值,和接受returnlist里面的变量一一对应起来,当遇到数组是表示接受所有值。所以,解决这个问题就需要使用引用,如:

相关推荐