• 转 Perl函数返回值用法指导


    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
    ";  
    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
    $result_b=$result_b
    ";  
    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
    @result_b=@result_b
    ";  
    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
    @result_b=@result_b
    ";  
    17 #######print resultis:  
    18 @result_a=1,2  
    19 @result_b=30,40  

     

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

  • 相关阅读:
    16.Linux yum扩展
    15.Linux软件管理
    11.Linux用户特殊权限
    10.Linux用户权限
    9.Linux用户管理(下)
    8.Linux用户管理(上)
    6.Linux文件属性及软硬链接
    5.Linux文件管理相关命令(下)
    如何解决微服务分布式事务问题
    Redis缓存和MySQL数据一致性方案(转)
  • 原文地址:https://www.cnblogs.com/njczy2010/p/5555231.html
Copyright © 2020-2023  润新知