转 Perl函数返回值用法指导

本文详细介绍了Perl函数返回值的多种用法,包括单一变量、多个标量及数组的返回方式,并通过示例代码展示了如何正确处理不同类型的返回值。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

http://developer.51cto.com/art/201007/213003.htm

 

Perl函数返回值用法指导

 

Perl编程语言中Perl函数返回值用法你是否比较熟悉,这里向大家简单介绍一下,希望本文的介绍能让你有所收获欢迎大家一起来学习有关Perl语言的相关内容。

 

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

Perl函数返回值

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

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

 

 1 #Functiondefinition.  
 2 subget_value()  
 3 {  
 4 my$var;  
 5 $var=1;  
 6 return($var);  
 7 }  
 8 #########Mainscript  
 9 my$result;  
10 $result=get_value();  
11 print"\$result=$result\n";  
12 #######printresultis:  
13 $result=1;  

 

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

 

 1 #Functiondefinition.  
 2 subget_value()  
 3 {  
 4 my($var_a,$var_b);  
 5 $var_a=1;  
 6 $var_b=2;  
 7 return($var_a,$var_b);  
 8 }  
 9 #########Mainscript  
10 my($result_a,$result_b);  
11 ($result_a,$result_b)=get_value();  
12 print"\$result_a=$result_a\n\$result_b=$result_b\n";  
13 #######printresultis:  
14 $result_a=1;  
15 $result_b=2;  

 

三、数组的Perl函数返回值

有问题的代码:

 1 #Functiondefinition.  
 2 subget_value()  
 3 {  
 4 my(@$var_a,@var_b);  
 5 @var_a=(1,2);  
 6 @var_b=(30,40);  
 7 return(@var_a,@var_b);  
 8 }  
 9 #########Mainscript  
10 my(@result_a,@result_b);  
11 (@result_a,@result_b)=get_value();  
12 print"\@result_a=@result_a\n\@result_b=@result_b\n";  
13 #######printresultis:  
14 @result_a=1,2,30,40  
15 @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里面的变量一一对应起来,当遇到数组是表示接受所有值。所以,解决这个问题就需要使用引用,如:
 

 1 #Function definition.  
 2 sub get_value()  
 3 {  
 4 my(@$var_a,@var_b);  
 5 @var_a=(1,2);  
 6 @var_b=(30,40);  
 7 return(\@var_a,\@var_b);  
 8 }  
 9 #########Main script  
10 my(@result_a,@result_b);  
11 my($result_a_ref,$result_b_ref);  
12 ($result_a_ref,$result_b_ref)=get_value();  
13 #here need to encode the reference  
14 @result_a=@$result_a_ref;  
15 @result_b=@$result_b_ref;  
16 print"\@result_a=@result_a\n\@result_b=@result_b\n";  
17 #######print resultis:  
18 @result_a=1,2  
19 @result_b=30,40  

 

 

所以对于哈希变量的返回也可以做同样的处理,当有标量,数组,哈希变量一起混合使用的时候也应该做同样的处理。

转载于:https://www.cnblogs.com/njczy2010/p/5555231.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值