Perl 特殊变量
-
特殊变量
Perl 中有一些具有预定义和特殊含义的变量。它们是在常规变量指示符($,@或%)之后使用标点符号的变量,例如$_(在下面说明)。 大多数特殊变量的名称都像英文一样长,例如,操作系统错误变量$!。可以写为$OS_ERROR。但是,如果您要使用英语(如名称),那么您将不得不使用英语一行。在程序文件的顶部。这将引导解释器理解变量的确切含义。最常用的特殊变量是$_,它包含默认输入和模式搜索字符串。例如,在以下几行中- -
if 语句
当需要检查语句的返回值时,if语句是显而易见的选择。例如-
尝试一下foreach ('hickory','dickory','doc') { print $_; print "\n"; }
再次,让我们检查相同的示例,而无需显式使用$_变量-
尝试一下foreach ('hickory','dickory','doc') { print; print "\n"; }
第一次执行循环时,将打印“hickory”。第二次打印“dickory”,第三次打印“doc”。这是因为在循环的每次迭代中,当前字符串都放在$_中,并且在默认情况下由print使用。这是Perl即使不指定$_也会假设$_保存的地方-- 各种一元函数,包括ord和int之类的函数,以及除-t外的所有文件测试(-f,-d),默认情况下为STDIN。
- 各种列表功能,例如打印和取消链接。
- 当不使用=~运算符时,模式匹配操作m//,s///和tr///。
- 如果未提供其他变量,则为foreach循环中的默认迭代器变量。
- grep和map函数中的隐式迭代器变量。
- 单独测试行输入操作的结果时,放置输入记录的默认位置是while测试(即)的唯一标准。请注意,在一段时间测试之外,不会发生这种情况。
-
特殊变量类型
根据特殊变量的用法和性质,我们可以将其分类为以下几类:- 全局标量特殊变量。
- 全局数组特殊变量。
- 全局哈希特殊变量。
- 全局特殊文件句柄。
- 全局特殊常数。
- 正则表达式特殊变量。
- Filehandle特殊变量。
-
全局标量特殊变量
这是所有标量特殊变量的列表。我们已经列出了相应的英语名称和符号名称。名称 含义 $_ 默认输入和模式搜索空间。 $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 or $ERRNO $@ 来自最后一个eval命令的Perl语法错误消息。 $EVAL_ERROR $$ 运行此脚本的Perl进程的pid。 $PROCESS_ID or $PID $< 此过程的真实用户ID(uid)。 $REAL_USER_ID or $UID $> 此过程的有效用户ID。 $EFFECTIVE_USER_ID or $EUID $( 此过程的真实组ID(gid)。 $REAL_GROUP_ID or $GID $) 这个过程的有效指导。 $EFFECTIVE_GROUP_ID or $EGID $0 包含包含正在执行的Perl脚本的文件的名称。 $PROGRAM_NAME $[ 数组中第一个元素的索引和子字符串中第一个字符的索引。 默认值为0。 $] 返回版本加补丁级别除以1000。 $PERL_VERSION $^D 调试标志的当前值。 $DEBUGGING $^E 在某些平台上的扩展错误消息。 $EXTENDED_OS_ERROR $^F 最大系统文件描述符,通常为2。 $SYSTEM_FD_MAX $^H 包含某些实用模块启用的内部编译器提示。 $^I Inplace-Edit扩展的当前值。 使用undef禁用就地编辑。 $INPLACE_EDIT $^M 如果Perl因内存不足错误而死,则$M的内容可用作紧急内存池。 使用$M需要对Perl进行特殊编译。 有关更多信息,请参见INSTALL文档。 $^O 包含当前Perl二进制文件为其编译的操作系统的名称。 $OSNAME $^P 调试器清除的内部标志,以便它不会自行调试。 $PERLDB $^T 脚本开始运行的时间(以纪元为单位)。 $BASETIME $^W 警告开关的当前值,是true或false。 $WARNING $^X Perl二进制本身执行的名称。 $EXECUTABLE_NAME $ARGV 从<ARGV>读取时包含当前文件的名称 -
全局数组特殊变量
变量 说明 @ARGV 包含用于脚本的命令行参数的数组。 @INC 该数组包含要查找由do,require或use构造评估的Perl脚本的位置的列表。 @F 给定-a命令行开关时,将输入行拆分为的数组。 -
全局哈希特殊变量
变量 说明 %INC 散列包含通过do或require包含的每个文件的文件名条目。 %ENV 包含您当前环境的哈希。 %SIG 用于为各种信号设置信号处理程序的哈希。 -
全局哈希特殊变量
变量 说明 %INC 散列包含通过do或require包含的每个文件的文件名条目。 %ENV 包含您当前环境的哈希。 %SIG 用于为各种信号设置信号处理程序的哈希。 -
全局特殊文件句柄
变量 说明 ARGV 遍历@ARGV中的命令行文件名的特殊文件句柄。 通常写为<>中的空文件句柄。 STDERR 任何软件包中用于标准错误的特殊文件句柄。 STDIN 任何包装中用于标准输入的特殊文件句柄。 STDOUT 任何包中用于标准输出的特殊文件句柄。 DATA 特殊文件句柄,它引用包含脚本的文件中__END__令牌后的所有内容。 或者,只要找到的是同一包__DATA__中的数据,就可以找到所需文件中紧随__DATA__令牌之后的所有内容的特殊文件句柄。 _ (下划线) 特殊的文件句柄,用于缓存来自最后一个stat,lstat或file test运算符的信息。 -
全局特特殊常数
常量 说明 __END__ 指示程序的逻辑结束。 以下任何文本均将被忽略,但可以通过DATA文件句柄读取。 __FILE__ 代表文件名在程序中的使用位置。 不插值到字符串中。 __LINE__ 代表当前行号。 不插值到字符串中。 __PACKAGE__ 表示编译时的当前软件包名称,如果没有当前软件包,则为undefined。 不插值到字符串中。 -
正则表达式特殊变量
变量 说明 $digit 包含在最后匹配的模式中由相应的括号组匹配的文本。 例如,$ 1与上一个正则表达式的第一组括号中包含的内容匹配。 $& 上一次成功的模式匹配所匹配的字符串。 $MATCH $` 上一个成功的模式匹配匹配的字符串。 $PREMATCH $' 上一次成功的模式匹配所匹配的字符串。 $POSTMATCH $+ 最后一个括号与最后一个搜索模式匹配。 如果您不知道匹配的是哪种替代模式,这将很有用。 例如:/Version: (.*)|Revision: (.*)/ && ($rev = $+); $LAST_PAREN_MATCH -
Filehandle特殊变量
变量 说明 $| 如果设置为非零,则在当前所选输出通道上的每次写入或打印后强制fflush(3)。 $OUTPUT_AUTOFLUSH $% 当前所选输出通道的当前页码。 $FORMAT_PAGE_NUMBER $= 当前所选输出通道的当前页面长度(可打印的行)。 默认值为60。 $FORMAT_LINES_PER_PAGE $- 当前所选输出通道页面上剩余的行数。 $FORMAT_LINES_LEFT $~ 当前所选输出通道的当前报告格式的名称。 默认值为文件句柄的名称。 $FORMAT_NAME $^ 当前所选输出通道的当前页面顶部格式的名称。 默认值是附加了_TOP的文件句柄的名称。 $FORMAT_TOP_NAME