perl學習之子程式

2022-10-11 05:57:07 字數 2144 閱讀 5250

一、定義

子程式即執行乙個特殊任務的一段分離的**,它可以使減少重複**且使程式易讀。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);

三、返回值

預設的,子程式中最後乙個語句的值將用作返回值。語句return (retval);也可以推出子程式並返回值retval,retval可以為列表。

四、區域性變數

子程式中區域性變數的定義有兩種方法:my和local。其區別是:my定義的變數只在該子程式中存在;而local定義的變數不存在於主程式中,但存在於該子程式和該子程式呼叫的子程式中(在perl4中沒有my)。定義時可以給其賦值,如:

my($scalar) = 43;

local(@array) = (1, 2, 3);

五、子程式引數傳遞

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 二.呼叫 呼叫方法如下 1.用 呼叫 subname sub subname 2.先定義後呼叫,可以省略 符號 sub subname...

perl學習 4 子程式

子程式,模擬c語言中的函式,在形式上個人認為最大的區別 沒有形參 usr bin perl sub marine marine marine 所有的perl 子程式都會返回值,在perl 中返回值和不返回值是沒有區別的。當然,不是所有perl子程式返回的值都是有用的。由於所有的被呼叫的子程式都要返回...

Perl函式 子程式 學習筆記

一 函式定義 子程式即一段分離的 它可以使減少重複 且程式易讀.perl中,子程式可以出現在程式的任何地方.但一般放在程式的開始或結尾.複製 如下 sub subroutine sub開始,子程式名同變數的命名規則,可與變數同名,最好不要與內部函式同名,如果與內部函式同名則用 subroutine區...