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