重拾perl
原文:http://www.linuxsir.org/bbs/showthread.php?t=78216
Perl
函數和範圍。
文法:
Sub subroutineName
{
my
(@argsTosubroutine) = @_; # 參數通過這種方式傳遞給函數
&doStuff; #
執行體
return ( @returnValue ); #
}
特殊變數 @_
是參數棧,它對於被調用的子程式來說是本機資料。每次調用子程式時就把參數放入到 @_ 中。@_ 的工作方式非常象c和c++
中的棧。因為參數棧是一個數組,所以傳遞給函數的參數的數量沒有限制。而沒個參數都是一個標量。當調用子程式時候,參數棧的長度是無關緊要的。無論把什麼
參數傳遞給讀者的子程式,perl 都將負責產生@_ , 並由子函數決定是否接收參數。
巨集指令引數棧:
(在perl
中任何數組的下標都是從0開始的)。
對於@_象其他類型的數組一樣可以通過下標來訪問。
也可以利用shift 和 pop
函數來訪問@_. 實際上shift 和pop表示 shift(@_) pop(@_)
即為兩個對參數棧操作的函數。表示從棧頂還是棧底對參數棧進行操作。每次調用它們時候,他們取走第一個參數(shift)或做後一個參數(pop)。然後
在把參數儲存在左側的變數中,在繼續執行時縮短@_.
本地@_
棧。這個特性允許在一個函數內部調用函數,不必擔心本層函數影響下層函數。這種靈活性允許perl使用遞迴程式,
傳回值棧是perl
把值返回給子程式的調用者的方法。@values = subroutine ($arguments).
與參數棧相同,傳回值棧也是數組形式。
子函數把值返回給主函數,主要有兩種方法:
使用特殊的函數返回方式
使用預設方式
(即查看子程式的最後一個運算式)。
1. Return 關鍵字
Return
關鍵字允許你立刻中斷子函數,把參數棧內部的值返回給調用函數。
2. 預設返回
如果在函數中沒有return
語句,則子程式的最後一句實際上是傳回值棧
3. Wantarray
該函數就是perl
中可以使子函數執行雙重職責的函數。Wantarray能判斷一個函數是用在要求數組的環境還是要求在標量的環境。