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";
}
When executed, this will also produce the following result −
hickory dickory doc
第一次执行循环时,会打印"hickory"。 第二次打印"dickory",第三次打印"doc"。 那是因为在循环的每次迭代中,当前字符串都放在 $_ 中,并且默认情况下被 print 使用。 这里是 Perl 假定 $_ 的地方,即使你没有指定它 −
各种一元函数,包括 ord 和 int 等函数,以及所有文件测试(-f、-d),但默认为 STDIN 的 -t 除外。
各种列表功能,如打印和取消链接。
模式匹配操作 m//、s/// 和 tr/// 在不使用 =~ 运算符时使用。
如果没有提供其他变量,则为 foreach 循环中的默认迭代器变量。
grep 和 map 函数中的隐式迭代器变量。
当一个 line-input 操作的结果被自己测试为 while 测试的唯一标准时,放置输入记录的默认位置(即,)。 请注意,在一段时间测试之外,这不会发生。
特殊变量类型
根据特殊变量的用途和性质,我们可以将它们分为以下几类 −
- 全局标量特殊变量。
- 全局数组特殊变量。
- 全局哈希特殊变量。
- 全局特殊文件句柄。
- 全局特殊常量。
- 正则表达式特殊变量。
- 文件句柄特殊变量。
全局标量特殊变量
这是所有标量特殊变量的列表。 我们列出了相应的类似英语的名称以及符号名称。
| $_ | 默认输入和模式搜索空间。 |
| $ARG | |
| $. | 读取的最后一个文件句柄的当前输入行号。 文件句柄上的显式关闭会重置行号。 |
| $NR | |
| $/ | 输入记录分隔符; 默认换行。 如果设置为空字符串,它会将空行视为分隔符。 |
| $RS | |
| $, | 打印操作符的输出字段分隔符。 |
| $OFS | |
| $\ | 打印操作符的输出记录分隔符。 |
| $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 or $UID | |
| $> | 该进程的有效用户ID。 |
| $EFFECTIVE_USER_ID 或 $EUID | |
| $( | 这个进程的真实组ID(gid)。 |
| $REAL_GROUP_ID or $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 | $M 的内容可以用作紧急内存池,以防 Perl 因内存不足错误而死机。 使用 $M 需要对 Perl 进行特殊编译。 有关详细信息,请参阅安装文档。 |
| $^O | 包含编译当前 Perl 二进制文件的操作系统的名称。 |
| $OSNAME | |
| $^P | 调试器清除的内部标志,以便它不会自行调试。 |
| $PERLDB | |
| $^T | 脚本开始运行的时间,自纪元以来的秒数。 |
| $BASETIME | |
| $^W | 警告开关的当前值,true 或 false。 |
| $WARNING | |
| $^X | Perl 二进制文件本身执行的名称。 |
| $EXECUTABLE_NAME | |
| $ARGV | 从 <ARGV> 读取时包含当前文件的名称。 |
全局数组特殊变量
| @ARGV | 包含用于脚本的命令行参数的数组。 |
| @INC | 包含查找 Perl 脚本的位置列表的数组,这些位置将由 do、require 或 use 构造进行评估。 |
| @F | 当给出 -a 命令行开关时,输入行被分割成的数组。 |
全局散列特殊变量
| %INC | 通过 do 或 require 包含的每个文件的文件名条目的哈希值。 |
| %ENV | 包含您当前环境的哈希值。 |
| %SIG | 用于为各种信号设置信号处理程序的哈希值。 |
全局特殊文件句柄
| ARGV | 在@ARGV 中迭代命令行文件名的特殊文件句柄。 通常写为 <> 中的空文件句柄。 |
| STDERR | 任何包中标准错误的特殊文件句柄。 |
| 标准输入 | 任何包中标准输入的特殊文件句柄。 |
| STDOUT | 任何包中标准输出的特殊文件句柄。 |
| DATA | 引用包含脚本的文件中 __END__ 标记之后的任何内容的特殊文件句柄。 或者,所需文件中 __DATA__ 标记之后的任何内容的特殊文件句柄,只要您正在读取同一包中的数据 __DATA__ 被发现。 |
| _ (underscore) | 用于缓存来自最后一个 stat、lstat 或文件测试运算符的信息的特殊文件句柄。 |
全局特殊常量
| __END__ | 表示程序的逻辑结束。 后面的任何文本都会被忽略,但可以通过 DATA 文件句柄读取。 |
| __FILE__ | 表示程序中使用它的位置的文件名。 不插入字符串。 |
| __LINE__ | 表示当前行号。 未插入字符串。 |
| __PACKAGE__ | 表示编译时的当前包名,如果没有当前包,则为 undefined。 不插入字符串。 |
正则表达式特殊变量
| $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 |

