Perl 特殊變數
Perl 語言中定義了一些特殊的變量,通常以 $, @, 或 % 作為前綴,例如:$_。
很多特殊的變數有一個很長的英文名,作業系統變數 $! 可以寫為 $OS_ERROR。
如果你想使用英文名的特殊變數需要在程式頭上加上 use English;。這樣就可以使用具有描述性的英文特殊變數。
最常用的特殊變數為 $_,該變數包含了預設輸入和模式匹配內容。實例如下:
#!/usr/bin/perl foreach ('Google','php','Taobao') { print $_; print "\n"; }
執行上述程序,輸出結果為:
Google php Taobao
以下實例我們不使用$_ 來輸出內容:
#!/usr/bin/perl foreach ('Google','php','Taobao') { print; print "\n"; }
執行以上程序,輸出結果為:
Google php Taobao
實例中,先輸出"Google" ,接著輸出"php" ,最後輸出"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 | |
$" | 此變數同$,類似,但應用於雙引號所引起的字串(或類似的內插字串)中內插數組和切片值的場合。預設為一個空格。 "。 |
$SUBSCRIPT_SEPARATOR | |
#$^L | 傳送到輸出通道的走紙換頁符。預設為"\f". |
$FORMAT_FORMFEED | |
$: | The current set of characters after which a string may be broken to fill continuation fields (starting with ^) in a format. Default is "\n"". |
$FORMAT_LINE_BREAK_CHARACTERS | |
$^ A | 列印前用於儲存格式化資料的變數 |
$ACCUMULATOR | |
##列印數字時預設的數字輸出格式(已廢棄)。 | |
$OFMT | |
$? | #返回上一個外部指令的狀態 |
#$CHILD_ERROR | |
$! | 這個變數的數字值是errno的值,字串值是對應的系統錯誤字串 |
$OS_ERROR or $ERRNO | |
$@ | 指令eval的錯誤訊息.如果為空,則表示上一次eval指令執行成功 |
$EVAL_ERROR | |
$$ | 執行目前Perl腳本程式的行程編號 |
目前流程的實際使用者號碼 | |
目前行程的有效使用者號碼 | |
目前程序的實際群組使用者號碼 | |
目前進程的有效群組使用者號碼 | |
包含正在執行的腳本的檔案名稱 | |
陣列的陣列第一個元素的下標,預設是0。 | |
Perl的版本號碼 | |
調試標誌的值 | |
在非UNIX環境中的作業系統擴充錯誤訊息 | |
最大的檔案捆述符數值 | |
由編譯器啟動的語法檢查狀態 | |
內建控制編輯器的值 | |
備用記憶體池的大小 | |
$^O | 作業系統名稱 |
#$OSNAME | |
$^P | 指定目前偵錯值的內部變數 |
$PERLDB | |
從新世紀開始算起,腳步本以秒計算的開始運行的時間 | |
警告開關的目前值 | |
Perl二進位執行碼的名稱 | |
從預設的檔案句柄讀取時的目前檔名 | |
傳給腳本的命令列參數清單 | |
在匯入模組時需要搜尋的目錄清單 | |
命令列的陣列輸入 |
散列表%INC包含所有用do或require語句包含的檔案.關鍵字是檔案名稱,值是這個檔案的路徑 | |||||||||||||||||||||||||||||||||||||||||||||||||||||
包含目前環境變數 | |||||||||||||||||||||||||||||||||||||||||||||||||||||
##訊號清單及其處理方式 |
ARGV | #遍歷陣列變數@ARGV中的所有檔案名稱的特殊檔案句柄 |
STDERR | 標準錯誤輸出句柄 |
##STDIN | 標準輸入句柄|
STDOUT | #標準輸出句柄|
特殊文件句柄引用了在文件中__END__ 標誌後的任何內容包含腳本內容。或引用一個包含文件中__DATA__ 標誌後的所有內容,只要你在同一個包有讀取數據,__DATA__ 就存在。 | |
特殊的檔案句柄用於快取檔案資訊(fstat、stat和lstat)。 |
腳本的邏輯結束,忽略後面的文字。 | |
目前檔案名稱 | |
目前行號 | |
#目前包名,預設的包名是main。 |
包含上次模式匹配的第n個子字串 | |
前一次成功模式匹配的字串 | |
前次符合成功的子字串之前的內容 | |
##前次符合成功的子字串之後的內容 | |
檔案句柄特殊變數
$| | #如果設定為零,每次呼叫函數write或print後,自動呼叫函數fflush,將所寫內容寫回檔案 |
#$OUTPUT_AUTOFLUSH | |
#$% | 目前輸出頁號 |
$FORMAT_PAGE_NUMBER | |
##$= | 目前每頁長度。預設為 60。|
$FORMAT_LINES_PER_PAGE | |
$- | 目前頁剩餘的行數|
$FORMAT_LINES_LEFT | |
$~ | 目前報表輸出格式的名稱。預設值是檔案句柄名。|
$FORMAT_NAME | |
#$^ | 目前報表輸出表頭格式的名稱。預設值是帶有後綴"_TOP"的檔案句柄名。|
$FORMAT_TOP_NAME |