2012年10月19日

Learning Perl 3


l   副常式就是一般所謂的函式,可重複利用的程式碼片段,不過在Perl裡通常是說使用者自訂的叫做「副常式」,內建的則是「函式」
l   副常式名稱規則與變數一樣,通常是開頭加上「&」,但有禁止的情況
l   副常式宣告:
sub name{
# your code
}
l   副常式呼叫:&name;
l   由於Perl所規定的副常式都具有傳回值,因此副常式的最後一次求值動作便當成傳回值,若最後一行為print則傳回1
l   在副常式名稱後面加上引數串列(argument list)就可傳值,此串列值將被記在「@_」這個陣列變數中,在此副常式結束前都存在
l   若全域變數有@_,也不用擔心副常式的參數陣列會有問題,副常式當中呼叫另一副常式也一樣,因為在自己的@_出現前會先將之前的存起來
l   Perl當中所有的變數預設都是「全域變數」
l   用「my」運算符建立副常式內部的語彙變數(lexical variable),因此這些變數作用範圍僅限於此副常式內,通常也用在區塊內e.g. if, while, foreach
l   因此可以習慣性以 my($x, $y, $z) = @_; 放於副常式開頭將變數指定給特定語彙變數
l   高水位標記:
sub max{
        my($max_so_far) = shift @_;
        foreach (@_){
                if($_ > $max_so_far){
                        $max_so_far = $_;
}
}
$max_so_far;
}
l   my($num) = @_; #串列語境;my $num = @_; #純量語境
l   my沒用圓括號就只能宣告一個變數,用圓括號才能宣告多個
l   use strict」放在程式開頭或任何想套用此規則的區塊內,便能強制使用一些良好的程式語言規則,或使用use 5.012便自動為你載入strict
l   字串比較只能用「eq」運算符而非「==
l   副常式除了回傳純量值亦可除回串列值
l   state代替my來宣告語彙變數,並且在兩次副常式呼叫之間保存變數的值

沒有留言:

張貼留言