4,子程式(筆記)

tonykorn97發表於2007-06-20
1, 定義子例程
例子:
sub marine {
$n +=1; #全域性變數$n
print "hello,sailor number $n! ";
}

2, 呼叫子程式
任何表示式中只有使用了子程式的名稱(加上&符號),就會呼叫(invoke)子程式。
&marine;

3, 返回值
最後一次運算的結果不管是多少,都會被自動當成子程式的返回值。

4,引數
perl子程式還可以有引數(argument).要傳遞引數列表(argument list)到子程式裡,只要在子程式呼叫的後面加上被括號括住的列表表示式

(list expression)就行了。做法如下所示:
$n = &max(10,15); #本子程式的呼叫包含了兩個引數
引數列表將會被傳入子程式,讓子程興隨意使用。當前,需要有變數來儲存這個列表,所以perl會自動將引數列表儲存到名為@_的特殊陣列

變數,所以這表示子程式的第一個引數儲存於$_[0],第二個引數儲存於$_[1].
sub max {
if ($_[0] > $_[1]) {
$_[0];
} else {
$_[1];
}
}

5, 子例程裡的私有變數
使用my運算子來建立成為詞法變數的私有變數:
sub max {
my ($m,$n); #此塊中新的私有變數
($m,$n) = @_; #將引數賦值給具名變數
is ($m > $n ) {$m } else {$n}
}
my運算子也可以應用到括號內的變數列表,所以習慣上會將這個子程式中的前兩行語句合併起來:
  my($m,$n) = @_;

6, 關於詞法(my)變數
詞法變數可使用在任何塊內,而不僅限於子程式的塊,它可以在if,while或foreach的塊裡使用。

7,use strict編譯命令

8,return運算子
在子例程中,return運算子會立即返回某個值。

9,省略&符號
在呼叫子程式時何時可以省略&符號的規則。如果編譯器在呼叫子例程之前看到了子程式的定義,或者perl可以分辨它是子程式呼叫的語法

,那麼該子程式就可以像內建函式那樣在呼叫時省略&符號。

例如:
只要將引數列表放進括號內,它就一定是函式呼叫
如果perl的內部編譯器已經見過子程式的定義,那麼&符號通常也可以省略。這種情況下,甚至可以去掉引數列表兩邊的括號;

10,返回非標量值
子程式不僅可以返回標量值,只要在列表上下文中呼叫它,它就可以返回列表值。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/312079/viewspace-245688/,如需轉載,請註明出處,否則將追究法律責任。

相關文章