一.定義
子程式即執行乙個特殊任務的一段分離的**,它可以使減少重複**且使程式易讀.
perl中,子程式可以出現在程式的任何地方.
定義方法為:
sub subroutine
二.呼叫
呼叫方法如下:
1.用&呼叫
&subname;
...sub subname
2.先定義後呼叫,可以省略&符號
sub subname
...subname;
3.前向引用,先定義子程式名,後面再定義子程式體
sub subname;
...subname;
...sub subname
4.用do呼叫
do my_sub(1, 2, 3);
等價於&my_sub(1, 2, 3);
三.返回值
預設的,子程式中最後乙個語句的值將用作返回值.
例如:sub subtion()
print subtion;
輸出結果將會是8,因為此子程式將會返回8.
語句return (retval);也可以退出子程式並返回值retval,retval可以為列表.
四.區域性變數
子程式中區域性變數的定義有兩種方法;my和local.
其區別是:my定義的變數只在該子程式中存在,而local定義的變數不存在於主程式中,但存在於該子程式和該子程式呼叫的子程式中(在perl4中沒有my).
定義時可以給其賦值,如:
my($scalar) = 43;
local(@array) = (1, 2, 3);
五.子程式引數傳遞
perl自動會將傳遞給子程式的引數列表存放在陣列@_中,子程式可以訪問這個陣列來取得引數.
1.形式
&sub1($number1, $number2, $nubmer3);
...sub sub1
2.傳送陣列
&addlist (@mylist);
&addlist ("14", "6", "11");
&addlist ($value1, @sublist, $value2);
...sub addlist
引數為陣列時,子程式只將它賦給乙個陣列變數.
如:sub twolists
其中@list2必然為空,但簡單變數和陣列變數可以同時傳遞:
&twoargs(47, @mylist); #47賦給$scalar,@mylist賦給@list
&twoargs(@mylist); #@mylist的第乙個元素賦給$scalar,其餘的元素賦給@list
...sub twoargs
六.遞迴子程式
perl中,子程式可以互相呼叫,其呼叫方法與上述相同,當呼叫該子程式本身時,即成了遞迴子程式.
遞迴子程式有兩個條件:
1,除了不被子程式改變的變數外,所有的變數必須的區域性的;
2,該子程式要含有停止呼叫本身的**.
七.用別名傳遞陣列引數
1.用前面講到的呼叫方法&my_sub(@array)將把陣列@array的資料拷貝到子程式中的變數@_中,當陣列很大時,將會花費較多的資源和時間,而用別名傳遞將不做這些工作,而對該陣列直接操作.
如:@myarray = (1, 2, 3, 4, 5);
&my_sub(*myarray);
sub my_sub
2.此方法類似於c語言中的傳遞陣列的起始位址指標,但並不一樣.
在定義陣列的別名之後,如果有同名的簡單變數,則對該變數也是起作用的.
如:$foo = 26;
@foo = ("here's", "a", "list");
&testsub (*foo);
...sub testsub
當子程式執行完,主程式中的$foo的值已經成了61,而不再是26了.
3.用別名的方法可以傳遞多個陣列.
如:@array1 = (1, 2, 3);
@array2 = (4, 5, 6);
&two_array_sub (*array1, *array2);
sub two_array_sub
在該子程式中,subarray1是array1的別名,subarray2是array2的別名.
八.預定義的子程式
perl5預定義了三個子程式,分別在特定的時間執行.
它們是:
begin子程式在程式啟動時被呼叫;
end子程式在程式結束時被呼叫;
autoload子程式在找不到某個子程式時被呼叫.
你可以自己定義它們,以在特定時間執行所需要的動作.
如:begin
autoload
若同乙個預定義子程式定義了多個,則begin順序執行,end逆序執行.
Perl函式 子程式 學習筆記
一 函式定義 子程式即一段分離的 它可以使減少重複 且程式易讀.perl中,子程式可以出現在程式的任何地方.但一般放在程式的開始或結尾.複製 如下 sub subroutine sub開始,子程式名同變數的命名規則,可與變數同名,最好不要與內部函式同名,如果與內部函式同名則用 subroutine區...
perl學習 4 子程式
子程式,模擬c語言中的函式,在形式上個人認為最大的區別 沒有形參 usr bin perl sub marine marine marine 所有的perl 子程式都會返回值,在perl 中返回值和不返回值是沒有區別的。當然,不是所有perl子程式返回的值都是有用的。由於所有的被呼叫的子程式都要返回...
perl學習之子程式
一 定義 子程式即執行乙個特殊任務的一段分離的 它可以使減少重複 且使程式易讀。perl中,子程式可以出現在程式的任何地方。定義方法為 sub subroutine 二 呼叫 呼叫方法如下 1 用 呼叫 subname sub subname 2 先定義後呼叫 可以省略 符號 sub subname...