1.**塊標籤
對任何迴圈塊來說,除了
do/while
或者do/until
結構外,他們都可以設定乙個「標籤」(
label
)。除了來對**塊作簡要說明之外,這個標籤還可以做
next
;last
和redo
等迴圈控制命令的乙個「目的地」或「目標」使用。注意,在指定標籤名的時候,在它後面要跟乙個冒號;且標籤一般使用大寫。
例如:outer
:迴圈塊
2.裸塊:
「裸塊」是一種包含了零行或多行**的**塊,用一對花括號封閉起來,既可能有標籤,也可能沒有標籤——但無論如何,都沒有配套使用的控制結構關鍵字。這種塊經常和
last
和redo
這樣的迴圈控制語句配合使用。注意,在乙個裸塊使用場合,
next
等價last。3.
邏輯運算子
與:&&and
或:||or
非:!not
在使用中一般使用「短路求值」。
4.錯誤控制函式:
die和
warn
在程式出現錯誤的時候使用
die函式進行錯誤提示,並中止程式執行。
一般寫為如下格式:
關鍵條件
ordie
「錯誤:關鍵條件沒有滿足
/n」
;
perl
會把最近產生的系統錯誤訊息儲存在乙個名為「$!
」的特殊變數中。
warn
函式可以產生和
die相同的輸出,只是程式不中止執行。
5.內建數學函式
函式說明
例子cos($x)求x
的余弦(
x用弧度表示)
cos(0)等於1
exp($x)求x
的x次方exp(1)
等於2.71828
abs($x)求x
的絕對值
abs(-5.1)
等於5.1
log($x)求x
的自然對數
log(2.71828)等於1
sin($x)求x
的正弦值
sin(0)等於0
sqrt($x)求x
的平方根
sqrt(900)
等於30
6.使用者自定義子程式
如果呼叫子程式時,子程式後跟一對空括號,表明子程式不接受
任何引數。
子程式的主體部分必須封閉在一對花括號內部。
子程式定義的標準格式如下:
sub
子程式名
7.引數列表
子程式接收的引數儲存在特殊的陣列變數@_
中。
特殊陣列變數@_
可以「處理」或者「打散」所有陣列與雜湊。也就是說,假如向子程式同時傳送乙個陣列值和乙個標量值,那麼在最終的
@_中,只會包含乙個簡單的列表,其中列出了來自陣列的資料和標量值。類似地,如果把乙個雜湊傳遞給子程式,那麼
@_最終也會拆散所有「鍵—值」對,用一種「平鋪直敘」的方法,把這些資料表示出來。
注意:@_
不能使用
$# 統計陣列的位數。
8.返回值ø
乙個子程式完成了自己的任務,結果資料可以通過
return
關鍵字返回子程式的呼叫者。
ø在子程式中使用如下表示式:
$value = shift;
意味著刪除子程式特殊陣列變數
@_中的第乙個元素,並將它賦予標量變數
$value。ø
一旦執行到
return
語句,子程式便會立即中止。
return
以後的語句將不會執行。如果子程式沒有明確的寫
return
語句,那麼子程式會預設返回它執行的最後一條語句的值。
øwantarray
函式:如果子程式主體中呼叫了這個函式,那麼假如子程式是在乙個列表使用場合下呼叫的,該函式便返回乙個真值;假如子程式是在乙個標量使用場合下呼叫的,該函式便返回乙個假值。
ø特殊變數
$」,表示預設的分隔字元是什麼,通常儲存著「
」值,(即乙個空格)。在雙引號中列印乙個陣列時,
$」中的值決定了在不同的值之間,應該列印什麼字元作為分隔符。
9.呼叫子程式的其他方式
øperl
用型別識別符號來區分不同的型別。對乙個子程式的名字來說,應該在它的前面加乙個型別識別符號
&。比如
&subroutine1();
它的作用便是呼叫乙個名為
subroutine1
的子程式。
ø如果呼叫子程式不需要傳遞任何引數;或者子程式只接收呼叫者的
@_變數(作為預設引數),那麼就可以省去圓括號。但如果有任何顯式引數需要傳遞給子程式,那麼一對圓括號便是必需的。
ø呼叫子程式的另一種語法是「裸字」。子程式名周圍沒有任何特殊符號可幫助
perl
判斷程式裡乙個名字的用途。假如在裸字之前,已經在程式中定義過字程式,那麼
perl
會呼叫相應得子程式。但是,如果在裸字之前沒有定義子程式,那麼
perl
將會把裸字解釋成為乙個字串,不會呼叫與它相對應的子程式。
10.生成隨機數
ø使用函式
rand
可生成乙個浮點標量值,它預設情況大於
0,但小於1。在
rand
函式種可以限定隨機數產生的範圍,如:
rand(6)
產生乙個大於
0,小於
6的隨機數。
ø偽隨機數:函式
rand
隨機數產生是利用前乙個隨機數以及乙個「種子」值,來產生下乙個隨機數。如果使用srand
函式設定種子值,將產生偽隨機數。ø由
rand
函式直接生成的值肯定在如下範圍內:
0<= rand ($x) < $x
perl學習筆記1 z
陣列1 在perl 中,如果將乙個非整數值當作陣列的下標使用,不會造成語法錯誤,但仍然會造成邏輯錯誤。例如,在乙個陣列下標表示式中,乙個非數字的字串下標求值結果為零,因此,表示式返回的肯定是陣列中的第乙個元素。2 對於陣列來說,並不一定要求其中的所有元素都具有同樣的型別。不過,所有陣列元素至少都得為...
perl學習筆記3 z
1 雜湊片斷,如果在花括號中提供了多鍵,便會返回與那些鍵相對應的值,結果生成的列表會被當作乙個陣列對待。所以無論是雜湊片斷還是陣列片斷,都要採用 符號。2 應用於雜湊的函式 keys 函式可返回乙個列表,其中包含了雜湊內的所有鍵值。values 函式也能返回乙個列表,其中包含了雜湊中的所有值。eac...
perl學習筆記5 z
1 遞迴 略 2 作用域規則 全域性 字典和動態的 識別符號的 作用域 是指程式中乙個特定的部分。只有在這個部分中,才可對此識別符號進行引用。有的識別符號可在程式中的任何地方引用 另一些則只能在有限的部分才能引用。字典作用域變數,只有在定義他的那個 快中才能使用它。動態作用域變數,只有從它建立位置開...