perl 是一種強大的腳本語言,主要用於腳本處理、報表生成,代碼簡潔高效,perl可以用少量代碼實現其他語言很多行代碼才能完成的任務,但是這樣的代價就是 perl 難學易忘,而且閱讀起來比較費力。
這里簡單記錄一些 perl 基本語法:
1. 創建 Perl 變量
perl 變量分為三種:標量,列表,哈希
一般字符和數字都是標量,創建標量用美元符號 $ 開頭:
$var = "str01"; # 字符變量
$var = 123; # 數值變量,注意 perl 每條命令都以分號 ‘;’ 結尾
注意在比較標量大小時,數值變量用 ==,>=,<=; 而字符變量用 eq,gt,lt
創建列表(即數組)用符號 @ 開頭,列表元素用小括號括起來:
@ary = (aa, bb, cc);
訪問列表元素用中括號:
print $ary[1]; # 輸出結果為 bb ,因為角標是從0開始算
創建哈希用符號%開頭,哈希元素用小括號括起來,哈希“鍵--值”對應可使用“key => value”
%hash = ( k1 => Jack,k2 => Pony );
訪問哈希元素用花括號:
say $hash{k2}; # 輸出結果為 Pony
2. Perl 控制流
perl 控制流語法與C語言類似:
如下圖示例: if, for, while, foreach (foreach 主要用於處理數組)
注意以下幾點:
a) 注意用 foreach 處理數組時,需要小括號將數組名括起來,如上圖中的 (@ary),這個小括號不可省略!
b) 上圖中用的是 say 命令來打印字符,say 與 print 的區別是 say 會自動給行尾加上回車,而 print 不會。
c) 再判斷真假的條件語句中,根據判斷條件的不同類型有幾種情況:
如果是數值變量:0為假,其他為真;
如果是字符變量:空字符串為假,其他為真;
如果是數組:空數組為假,其他為真;
d) foreach 和 while 等循環語句可以省略元素變量,這時在語句體中用符號 $_ 訪問當前元素,示例如下:
3. Perl 子程序(函數)
注意以下幾點:
a) 特殊符號 @_ 是一個數組,函數參數就是保存在這個特殊數組中
b) 函數中定義的變量默認是全局變量,最好加上關鍵字 ’my' 改為局部變量
c) 調用函數時最好在函數名字前加上 ‘&’
d) 允許把調用語句寫在創建子程序前面
所以上面這段程序按照規范的寫法應該是這樣:
4. 神奇的鑽石操作符
假設腳本 run.pl 中的內容如下:
文件 file.txt 的內容如下:
然后執行命令 run.pl ./file.txt,此時腳本中的鑽石操作符表示 “每次從文件 file.txt 中讀取一行,然后執行打印,接着讀取下一行,再打印,直到讀完最后一行,退出循環 ”
而如果腳本 run.pl 中的內容是這樣:
同樣執行命令 run.pl ./file.txt,此時鑽石操作符表示 “ 將文件 file.txt 中的所有行都讀進來,保存成一個列表,列表的每個元素就是文件中的每一行內容,讓后用 foreach 遍歷這個列表 ”
所以同樣是鑽石操作符,在不同的上下文中就表示不同的含義:
在 while 語句中,while 的條件只能是標量,所以是標量上下文,所以這時每次從文件中取出一行,作為字符串標量來執行一次循環;
而在 foreach 語句中,是列表上下文,所以這時直接從文件中取出所有的行,組成一個列表。
根據上面的規則,來看下面的腳本,如果 run.pl 中的內容如下:
命令reverse 只能接受列表參數,所以是列表上下文,執行命令 run.pl ./file.txt,結果是分三行依次輸出 three two one
5. Perl 中的特殊字符
a) 字符 @_ : 這是一個列表變量,存儲了函數的所有輸入參數
b) 字符 $_ : 一般用在循環體中,表示循環變量的當前值
|----------------------------------|