Perl 語言中定義了一些特殊的變量,通常以$, @, 或% 作為前綴,例如:$_。
很多特殊的變數有一個很長的英文名,作業系統變數$! 可以寫為$OS_ERROR。
如果你想使用英文名的特殊變數需要在程式頭上加上use English; 。這樣就可以使用具有描述性的英文特殊變數。
最常用的特殊變數為$_,該變數包含了預設輸入和模式匹配內容。實例如下:
執行以上程序,輸出結果為:
GoogleCoderctoTaobao
以下實例我們不使用$_ 來輸出內容:
執行以上程序,輸出結果為:
GoogleCoderctoTaobao
實例中,首先輸出"Google" ,接著輸出"Codercto" ,最後輸出"Taobao" 。
在迭代循環中,當前循環的字串會放在$_ 中, 然後透過print 輸出。另外print 在不指定輸出變量,預設使用的也是$_。
以下是幾個即使沒有寫明Perl 也會假設使用$_ 的地方:
各種單目函數,包括像ord() 和int() 這樣的函數以及除"-t"以外所有的檔案測試操作("-f","-d"),"-t" 預設操作STDIN。
各種列表函數,例如print() 和unlink()。
沒有使用"=~" 運算子時的模式比對操作"m//"、"s///" 和"tr///"。
在沒有給出其他變數時是"foreach" 迴圈的預設迭代變數。
grep() 和map() 函數的隱含迭代變數。
當"while" 僅有唯一條件,且該條件是對""操作的結果進行測試時,$_ 就是存放輸入記錄的預設位置。除了"while" 測試條件之外不會發生這種情況。 (助記:下劃線在特定操作中是可以省略的。)
根據特殊的變數的使用性質,可以分為以下幾類:
全域標量特殊變數。
全域數組特殊變數。
全域哈希特殊變數。
全域特殊文件句柄。
全域特殊常量。
正規表示式特殊變數。
文件句柄特殊變數。
以下列出了所有的標量特殊變量,包含了特殊字符與英文形式的變量:
$_ | 預設輸入和模式匹配內容。 |
$ARG | |
$. | 前一次讀的文件句柄的目前行號 |
$NR | |
$/ | 輸入記錄分隔符號,預設是新行字元。如用undef這個變數,將會讀到文件結尾。 |
$RS | |
$, | 輸出域分隔符 |
$OFS | |
$ | 輸出記錄分隔符 |
$ORS | |
$" | 此變數同$,類似,但應用於向雙引號引起的字串(或類似的內插字串)中內插數組和切片值的場合。預設為一個空格。 |
$LIST_SEPARATOR | |
$; | 在模擬多維數組時所使用的分隔符號。預設為" |