
- Perl 基礎
- Perl - 首頁
- Perl - 簡介
- Perl - 環境
- Perl - 語法概述
- Perl - 資料型別
- Perl - 變數
- Perl - 標量
- Perl - 陣列
- Perl - 雜湊
- Perl - IF...ELSE
- Perl - 迴圈
- Perl - 運算子
- Perl - 日期和時間
- Perl - 子程式
- Perl - 引用
- Perl - 格式
- Perl - 檔案 I/O
- Perl - 目錄
- Perl - 錯誤處理
- Perl - 特殊變數
- Perl - 編碼規範
- Perl - 正則表示式
- Perl - 傳送電子郵件
- Perl 高階
- Perl - 套接字程式設計
- Perl - 面向物件
- Perl - 資料庫訪問
- Perl - CGI 程式設計
- Perl - 包和模組
- Perl - 程序管理
- Perl - 嵌入式文件
- Perl - 函式引用
- Perl 有用資源
- Perl - 問答
- Perl - 快速指南
- Perl - 有用資源
- Perl - 討論
Perl - 特殊變數
在 Perl 中,有一些變數具有預定義的特殊含義。它們是在通常的變數指示符($, @ 或 %)之後使用標點符號的變數,例如 $_(如下所述)。
大多數特殊變數都有一個類似英文的長名稱,例如,作業系統錯誤變數 $! 可以寫成 $OS_ERROR。但是,如果您要使用類似英文的名稱,則需要在程式檔案頂部新增一行 use English;。這將指導直譯器獲取變數的確切含義。
最常用的特殊變數是 $_,它包含預設的輸入和模式搜尋字串。例如,在以下幾行中:
#!/usr/bin/perl foreach ('hickory','dickory','doc') { print $_; print "\n"; }
執行後,將產生以下結果:
hickory dickory doc
再次,讓我們檢查不顯式使用 $_ 變數的相同示例:
#!/usr/bin/perl foreach ('hickory','dickory','doc') { print; print "\n"; }
執行後,也將產生以下結果:
hickory dickory doc
第一次執行迴圈時,列印“hickory”。第二次列印“dickory”,第三次列印“doc”。這是因為在迴圈的每次迭代中,當前字串都放置在 $_ 中,並被 print 預設使用。以下是 Perl 即使您未指定也會假設 $_ 的位置:
各種一元函式,包括諸如 ord 和 int 之類的函式,以及所有檔案測試(-f,-d),除了 -t,它預設為 STDIN。
各種列表函式,如 print 和 unlink。
模式匹配操作 m//、s/// 和 tr///,當不用於 =~ 運算子時。
如果未提供其他變數,則在 foreach 迴圈中的預設迭代器變數。
grep 和 map 函式中的隱式迭代器變數。
當行輸入操作的結果本身作為 while 測試的唯一條件進行測試時(即,),將輸入記錄放置的預設位置。請注意,在 while 測試之外,不會發生這種情況。
特殊變數型別
根據特殊變數的使用和性質,我們可以將其分為以下幾類:
- 全域性標量特殊變數。
- 全域性陣列特殊變數。
- 全域性雜湊特殊變數。
- 全域性特殊檔案控制代碼。
- 全域性特殊常量。
- 正則表示式特殊變數。
- 檔案控制代碼特殊變數。
全域性標量特殊變數
以下是所有標量特殊變數的列表。我們列出了相應的類似英文的名稱以及符號名稱。
$_ | 預設的輸入和模式搜尋空間。 |
$ARG | |
$. | 最後一個讀取的檔案控制代碼的當前輸入行號。對檔案控制代碼的顯式關閉將重置行號。 |
$NR | |
$/ | 輸入記錄分隔符;預設為換行符。如果設定為空字串,則將空行視為分隔符。 |
$RS | |
$, | print 運算子的輸出欄位分隔符。 |
$OFS | |
$\ | print 運算子的輸出記錄分隔符。 |
$ORS | |
$" | 類似於 "$,",但它適用於插入到雙引號字串(或類似的解釋字串)中的列表值。預設為空格。 |
$LIST_SEPARATOR | |
$; | 多維陣列模擬的下標分隔符。預設為 "\034"。 |
$SUBSCRIPT_SEPARATOR | |
$^L | 格式輸出以執行換頁的字元。預設為 "\f"。 |
$FORMAT_FORMFEED | |
$: | 當前字元集,在這些字元之後可以中斷字串以填充格式中延續欄位(以 ^ 開頭)。預設為 "\n""。 |
$FORMAT_LINE_BREAK_CHARACTERS | |
$^A | 格式行的寫入累加器的當前值。 |
$ACCUMULATOR | |
$# | 包含列印數字的輸出格式(已棄用)。 |
$OFMT | |
$? | 最後一個管道關閉、反引號(``)命令或系統運算子返回的狀態。 |
$CHILD_ERROR | |
$! | 如果在數字上下文中使用,則產生 errno 變數的當前值,標識最後一個系統呼叫錯誤。如果在字串上下文中使用,則產生相應的系統錯誤字串。 |
$OS_ERROR 或 $ERRNO | |
$@ | 最後一個 eval 命令的 Perl 語法錯誤訊息。 |
$EVAL_ERROR | |
$$ | 執行此指令碼的 Perl 程序的 pid。 |
$PROCESS_ID 或 $PID | |
$< | 此程序的真實使用者 ID (uid)。 |
$REAL_USER_ID 或 $UID | |
$> | 此程序的有效使用者 ID。 |
$EFFECTIVE_USER_ID 或 $EUID | |
$( | 此程序的真實組 ID (gid)。 |
$REAL_GROUP_ID 或 $GID | |
$) | 此程序的有效 gid。 |
$EFFECTIVE_GROUP_ID 或 $EGID | |
$0 | 包含正在執行的 Perl 指令碼的檔名。 |
$PROGRAM_NAME | |
$[ | 陣列中第一個元素和子字串中第一個字元的索引。預設為 0。 |
$] | 返回版本加上補丁級別除以 1000。 |
$PERL_VERSION | |
$^D | 除錯標誌的當前值。 |
$DEBUGGING | |
$^E | 某些平臺上的擴充套件錯誤訊息。 |
$EXTENDED_OS_ERROR | |
$^F | 最大系統檔案描述符,通常為 2。 |
$SYSTEM_FD_MAX | |
$^H | 包含某些實用模組啟用的內部編譯器提示。 |
$^I | 就地編輯擴充套件的當前值。使用 undef 停用就地編輯。 |
$INPLACE_EDIT | |
$^M | 如果 Perl 因記憶體不足錯誤而死亡,則 $M 的內容可用作緊急記憶體池。使用 $M 需要對 Perl 進行特殊編譯。有關更多資訊,請參閱 INSTALL 文件。 |
$^O | 包含當前 Perl 二進位制檔案編譯的 операционная система 名稱。 |
$OSNAME | |
$^P | 偵錯程式清除的內部標誌,以便它不除錯自身。 |
$PERLDB | |
$^T | 指令碼開始執行的時間,以自紀元以來的秒數表示。 |
$BASETIME | |
$^W | 警告開關的當前值,為真或假。 |
$WARNING | |
$^X | Perl 二進位制檔案本身執行的名稱。 |
$EXECUTABLE_NAME | |
$ARGV | 從 <ARGV> 讀取時包含當前檔名。 |
全域性陣列特殊變數
@ARGV | 包含用於指令碼的命令列引數的陣列。 |
@INC | 包含要由 do、require 或 use 構造評估的 Perl 指令碼查詢位置的列表的陣列。 |
@F | 當給出 -a 命令列開關時,輸入行將被拆分到的陣列。 |
全域性雜湊特殊變數
%INC | 包含透過 do 或 require 包含的每個檔案的名稱的條目。 |
%ENV | 包含您當前環境的雜湊。 |
%SIG | 用於為各種訊號設定訊號處理程式的雜湊。 |
全域性特殊檔案控制代碼
ARGV | 迭代 @ARGV 中命令列檔名的特殊檔案控制代碼。通常在 <> 中寫成空檔案控制代碼。 |
STDERR | 任何包中的標準錯誤的特殊檔案控制代碼。 |
STDIN | 任何包中的標準輸入的特殊檔案控制代碼。 |
STDOUT | 任何包中的標準輸出的特殊檔案控制代碼。 |
DATA | 引用包含指令碼的檔案中 __END__ 令牌之後的任何內容的特殊檔案控制代碼。或者,對於所需檔案中 __DATA__ 令牌之後的任何內容的特殊檔案控制代碼,只要您在找到 __DATA__ 的同一包中讀取資料即可。 |
_(下劃線) | 用於快取來自最後一個 stat、lstat 或檔案測試運算子的資訊的特殊檔案控制代碼。 |
全域性特殊常量
__END__ | 指示程式的邏輯結束。任何後續文字都將被忽略,但可以透過 DATA 檔案控制代碼讀取。 |
__FILE__ | 表示程式中使用它的位置的檔名。不會插入到字串中。 |
__LINE__ | 表示當前行號。不會插入到字串中。 |
__PACKAGE__ | 表示編譯時的當前包名稱,如果不存在當前包,則為未定義。不會插入到字串中。 |
正則表示式特殊變數
$digit | 包含上次匹配的模式中相應括號集匹配的文字。例如,$1 匹配先前正則表示式中第一組括號中包含的內容。 |
$& | 上次成功模式匹配匹配的字串。 |
$MATCH | |
$` | 上次成功模式匹配之前匹配的字串。 |
$PREMATCH | |
$' | 上次成功模式匹配之後匹配的字串。 |
$POSTMATCH | |
$+ | 上次搜尋模式匹配的最後一個括號。如果您不知道匹配了一組備選模式中的哪一個,這將很有用。例如:/Version: (.*)|Revision: (.*)/ && ($rev = $+); |
$LAST_PAREN_MATCH |
檔案控制代碼特殊變數
$| | 如果設定為非零,則在當前選定的輸出通道上的每次寫入或列印後強制執行 fflush(3)。 |
$OUTPUT_AUTOFLUSH | |
$% | 當前選定輸出通道的當前頁碼。 |
$FORMAT_PAGE_NUMBER | |
$= | 當前選定輸出通道的當前頁長(可列印行)。預設為 60。 |
$FORMAT_LINES_PER_PAGE | |
$- | 當前選定輸出通道的頁面上剩餘的行數。 |
$FORMAT_LINES_LEFT | |
$~ | 當前選定輸出通道的當前報表格式的名稱。預設為檔案控制代碼的名稱。 |
$FORMAT_NAME | |
$^ | 當前選定輸出通道的當前頁首格式的名稱。預設為檔案控制代碼名稱後附加 _TOP。 |
$FORMAT_TOP_NAME |
廣告