轉 Perl函式返回值用法指導

2022-08-28 01:45:15 字數 2420 閱讀 4250

本文和大家重點討論一下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

print

"\@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 參照反匯程式設計序,可以看出函式的值並不是通過壓棧 基址定...

函式返回值

一般說來,函式中是可以進行區域性變數的返回的,不然豈不是全部要用全域性變數,如果使用了全域性變數,那還有必要進行返回嗎?那函式就沒有它存在的意義了!但是要注意了,這裡所謂的區域性變數的返回很有內涵,什麼樣的值才可以進行返回而不出錯?其實,只要遵守一句話即可 函式不能返回指向棧記憶體的指標!為什麼?因...