有些变量在Perl中具有预定义和特殊含义.它们是在通常的变量指示符($,@或%)之后使用标点符号的变量,例如$ _(如下所述).
大多数特殊变量都有英文像长名称,例如,操作系统错误变量$!可以写成$ OS_ERROR.但是如果你要使用英文名字,那么你必须在程序文件的顶部放一行使用英文; .这将指导解释器获取变量的确切含义.
最常用的特殊变量是$ _,它包含默认输入和模式搜索字符串.例如,在以下行中 :
#!/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等函数,以及除-t之外的所有文件测试(-f,-d),默认为STDIN.
各种列表函数,如print和unlink.
模式匹配操作m//,s///和tr///使用时没有=〜运算符.
如果没有提供其他变量,则foreach循环中的默认迭代器变量.
grep和map函数中的隐式迭代器变量.
在测试行输入操作的结果时放置输入记录的默认位置本身作为时间测试的唯一标准(即).请注意,在一段时间的测试之外,这不会发生.
根据特殊变量的用法和性质,我们可以将它们分类为以下类别 :
全局标量特殊变量.
全局数组特殊变量.
全局哈希特殊变量.
全局特殊文件句柄.
全球特殊常数.
正则表达式特殊变量.
Filehandle Special Variables.
以下是所有标量特殊变量的列表.我们列出了相应的英文名称以及符号名称.
$ _ | 默认输入和模式搜索空间. |
$ ARG | |
$. | 读取的最后一个文件句柄的当前输入行号.文件句柄上的显式关闭会重置行号. |
$ NR | |
$/ | 输入记录分隔符;默认为换行符.如果设置为空字符串,则将空行视为分隔符. |
$ RS | |
$, | 打印操作符的输出字段分隔符. |
$ OFS | |
$ \ | 打印操作符的输出记录分隔符. |
$ ORS | |
$" | 与"$"类似,不同之处在于它适用于插入双引号字符串(或类似解释字符串)的列表值.默认为空格. |
$ LIST_SEPARATOR | |
$; | 多维数组仿真的下标分隔符.默认为"\ 034". |
$ SUBSCRIPT_SEPARATOR | |
$ ^ L | 执行换页的格式输出.默认为"\'". |
$ FORMAT_FORMFEED | |
$: | 当前字符集,在该字符集之后可以断开字符串以填充格式中的连续字段(以^开头).默认为"\ n""". |
$ FORMAT_LINE_BREAK_CHARACTERS | |
$ ^ A | 格式行的写累加器的当前值. |
$ ACCUMULATOR | |
$# | 包含打印数字的输出格式(不建议使用). |
$ OFMT | |
$? | 最后一个管道关闭,反引号(``)命令或系统操作员返回的状态. |
$ CHILD_ERROR | |
$! | 如果在数字上下文中使用,则生成errno变量的当前值,标识las t系统调用错误.如果在字符串上下文中使用,则产生相应的系统错误字符串. |
$ 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 | 包含由某些启用的内部编译器提示实用模块. |
$ ^我 | inplace-edit扩展的当前值.使用undef禁用就地编辑. |
$ INPLACE_EDIT | |
$ ^ M | $ M的内容可用作紧急内存池以防万一Perl死于内存不足错误.使用$ 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 | 包含当前环境的哈希值nt. |
%SIG | 用于的哈希为各种信号设置信号处理程序. |
ARGV | 在@ARGV中迭代命令行文件名的特殊文件句柄.通常在<>中写为空文件句柄. |
STDERR | 任何包中标准错误的特殊文件句柄. |
STDIN | 任何包中标准输入的特殊文件句柄. |
STDOUT | 任何包中标准输出的特殊文件句柄. |
DATA | 引用包含脚本的文件中__END__标记之后的任何内容的特殊文件句柄.或者,在所需文件中的__DATA__标记后面的任何内容的特殊文件句柄,只要您在同一个包__DATA__中读取数据,就可以找到. |
_(下划线) | 用于缓存上一个stat,lstat或文件测试运算符的信息的特殊文件句柄./td> |
__ 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 |