轉 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\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  

 

 

所以對於哈希變量的返回也可以做同樣的處理,當有標量,數組,哈希變量一起混合使用的時候也應該做同樣的處理。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM