第八章 子程式

2022-07-27 19:30:19 字數 2482 閱讀 2485

一、定義 

子程式即執行乙個特殊任務的一段分離的**,它可以使減少重複**且使程式易讀。perl中,子程式可以出現在程式的任何地方。定義方法為:

subsubroutine

二、呼叫 

呼叫方法如下:1、用

&呼叫 

&subname;

...sub

subname

2、先定義後呼叫 ,可以省略&符號

subsubname

...subname;

3、前向引用 ,先定義子程式名,後面再定義子程式體

subsubname;

...subname;

...sub

subname

4、用do呼叫 

domy_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

);...

subsub1

2、傳送陣列 

&addlist (

@mylist);&

addlist ("14

","6

","11

");&addlist (

$value1

,@sublist

,$value2

);...

subaddlist 

引數為陣列時,子程式只將它賦給乙個陣列變數。如

subtwolists 

中@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);

submy_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);

subtwo_array_sub  

在該子程式中,subarray1是array1的別名,subarray2是array2的別名。

八、預定義的子程式 

perl5預定義了三個子程式,分別在特定的時間執行,它們是:begin子程式在程式啟動時被呼叫;end子程式在程式結束時被呼叫;autoload子程式在找不到某個子程式時被呼叫。你可以自己定義它們,以在特定時間執行所需要的動作。如:

begin 

autoload

若同乙個預定義子程式定義了多個,則begin順序執行,end逆序執行。

第八章 指標 第八章 指標

1 什麼是位址 include using namespace std int main 11 在堆中建立對像 我們既然可以在堆中儲存變數,那麼也就可以儲存對像,我們可以將對像儲存堆中,然後通過指標來訪問它 include using namespace std class human 14 在建構...

第八章(筆記)

能在 中進行記憶體單元的定址的暫存器只有4個,分別是bx si di bp 其中bx bp 是基址,bx對應的段位址是ds,bp對應的段位址是ss si di 是變址,單獨使用時段位址是ds,組合使用段位址是跟隨組合的基址對應的段位址 中進行記憶體單元定址彙總 si di bx bp 常量 si 常...

第八章 字典

d 空字典 d 這就是字典 d dict.fromkeys a b d dict zip keyslist,valslist d dict name bob age 22 建立字典的函式 d name 通過索引key獲取對應的value d.keys 返回d字典物件所有key,返回乙個列表 d.va...