本文和大家重點討論一下perl函式返回值的概念,在perl中,return語句可以返回乙個標量值或者乙個列表,這個標量值可以是乙個變數,或者乙個表示式的最後求值。
perl函式返回值
在perl中,return語句可以返回乙個標量值或者乙個列表,這個標量值可以是乙個變數,或者乙個表示式的最後求值,如:return1;<===>return(1);return$a+$b;<===>return($a+$b);
然後,乙個perl函式的返回值,並不止乙個,有的時候會有多個值需要返回,這是就要用到列表,這個列表可以包含多個變數值。
一、單一變數的perl函式返回值
1#functiondefinition.
2subget_value() 3
8#########mainscript 9my
$result
; 10
$result=get_value();
11print
"\$result=$result\n
"; 12#
######printresultis:
13$result=1;
二、多個標量的perl函式返回值
1#functiondefinition.
2subget_value() 3
9#########mainscript
10my($result_a,$result_b
);
11 ($result_a,$result_b)=get_value();
12print
"\$result_a=$result_a\n\$result_b=$result_b\n
"; 13#
######printresultis:
14$result_a=1
; 15
$result_b=2;
三、陣列的perl函式返回值
有問題的**:
1#functiondefinition.
2subget_value() 3
9#########mainscript
10my(@result_a,@result_b
);
11 (@result_a,@result_b)=get_value();
12print
"\@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.
2sub
get_value() 3
9#########main script
10my(@result_a,@result_b
);
11my($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
"\@result_a=@result_a\n\@result_b=@result_b\n
"; 17#
######print resultis:
18@result_a=1,2
19@result_b=30,40
所以對於雜湊變數的返回也可以做同樣的處理,當有標量,陣列,雜湊變數一起混合使用的時候也應該做同樣的處理。
C vector作為函式返回值用法
在實際應用過程中,我們經常需要儲存一系列的資料,有可能是乙個值,點等,這時我們會用到vector。如下所示 vector vector 與opencv結合使用時可能還會有 vector vector vector 等有時候我們需要將vector作為乙個函式的返回值。使用方法如下所示 我們將函式返回值...
函式返回值
這裡接著探求被調函式的返回值是如何傳遞到主調函式中的,下面為c程式。add函式通過直接返回a b的,而add1函式先定義乙個區域性變數c,儲存a b的值,然後再返回c的值。其中a b可以當成乙個臨時變數,其結果是暫時存放在暫存器中的 eax 參照反匯程式設計序,可以看出函式的值並不是通過壓棧 基址定...
函式返回值
一般說來,函式中是可以進行區域性變數的返回的,不然豈不是全部要用全域性變數,如果使用了全域性變數,那還有必要進行返回嗎?那函式就沒有它存在的意義了!但是要注意了,這裡所謂的區域性變數的返回很有內涵,什麼樣的值才可以進行返回而不出錯?其實,只要遵守一句話即可 函式不能返回指向棧記憶體的指標!為什麼?因...