perl子程式學習筆記

2021-05-10 00:18:50 字數 2387 閱讀 1519

一.定義

子程式即執行乙個特殊任務的一段分離的**,它可以使減少重複**且使程式易讀.

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...