Perl函數(shù)返回值用法指導(dǎo)
本文和大家重點(diǎn)討論一下Perl函數(shù)返回值的概念,在Perl中,return語(yǔ)句可以返回一個(gè)標(biāo)量值或者一個(gè)列表,這個(gè)標(biāo)量值可以是一個(gè)變量,或者一個(gè)表達(dá)式的最后求值。
Perl函數(shù)返回值
在Perl中,return語(yǔ)句可以返回一個(gè)標(biāo)量值或者一個(gè)列表,這個(gè)標(biāo)量值可以是一個(gè)變量,或者一個(gè)表達(dá)式的最后求值,如:return1;<===>return(1);return$a+$b;<===>return($a+$b);
然后,一個(gè)Perl函數(shù)的返回值,并不止一個(gè),有的時(shí)候會(huì)有多個(gè)值需要返回,這是就要用到列表,這個(gè)列表可以包含多個(gè)變量值。
一、單一變量的Perl函數(shù)返回值
- #Functiondefinition.
 - subget_value()
 - {
 - my$var;
 - $var=1;
 - return($var);
 - }
 - #########Mainscript
 - my$result;
 - $result=get_value();
 - print"\$result=$result\n";
 - #######printresultis:
 - $result=1;
 
二、多個(gè)標(biāo)量的Perl函數(shù)返回值
- #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;
 
三、數(shù)組的Perl函數(shù)返回值
- #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=
 
 #!!!在這里,我們?cè)鞠M玫降慕Y(jié)果應(yīng)該是:
@result_a=1,2
@result_b=30,40
但實(shí)際上卻并不是這樣,這里一點(diǎn)需要注意的是:Perl中返回值中的列表是被“鋪平(flattened)的”,也就是說(shuō):
return(@var_a,@var_b);<====等價(jià)===>return($var_a[0],$var_a[1],$var_b[0],$var_b[1]);
所以這個(gè)時(shí)候,return將會(huì)把returnlist里面的值,和接受returnlist里面的變量一一對(duì)應(yīng)起來(lái),當(dāng)遇到數(shù)組是表示接受所有值。所以,解決這個(gè)問(wèn)題就需要使用引用,如:
 
- #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
 
所以對(duì)于哈希變量的返回也可以做同樣的處理,當(dāng)有標(biāo)量,數(shù)組,哈希變量一起混合使用的時(shí)候也應(yīng)該做同樣的處理。
【編輯推薦】















 
 
 
 
 
 
 