分享

Perl函数返回值用法指导

 sailorhzr 2011-09-08

Perl函数返回值用法指导


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

在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里面的变量一一对应起来,当遇到数组是表示接受所有值。所以,解决这个问题就需要使用引用,如:

#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);  
my($result_a_ref,$result_b_ref);  (
$result_a_ref,$result_b_ref)=get_value();  
#hereneedtoencodethereference  
@result_a=@$result_a_ref; 
 @result_b=@$result_b_ref; 
 print"\@result_a=@result_a\n\@result_b=@result_b\n";  
#######printresultis:  @result_a=1,2  @result_b=30,40

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

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多