Special 变量
优质
小牛编辑
138浏览
2023-12-01
在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等函数,以及除-t之外的所有文件测试(-f,-d),默认为STDIN。
各种列表功能,如打印和取消链接。
模式匹配操作m //,s ///和tr ///在没有=〜运算符的情况下使用。
如果没有提供其他变量,则foreach循环中的默认迭代器变量。
grep和map函数中的隐式迭代器变量。
当行输入操作的结果被自身测试为while测试的唯一标准时(即),输入记录的默认位置。 请注意,在一段时间的测试之外,这不会发生。
特殊变量类型
根据特殊变量的用法和性质,我们可以按以下类别对它们进行分类 -
- 全局标量特殊变量。
- 全局数组特殊变量。
- 全局哈希特殊变量。
- 全球特殊文件句柄。
- Global Special Constants.
- 正则表达式特殊变量。
- 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或$ ERRNO | |
$@ | 上一个eval命令的Perl语法错误消息。 |
$EVAL_ERROR | |
$$ | 运行此脚本的Perl进程的pid。 |
$ PROCESS_ID或$ PID | |
$< | 此进程的真实用户ID(uid)。 |
$ REAL_USER_ID或$ UID | |
$> | 此进程的有效用户标识。 |
$ 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 | inplace-edit扩展的当前值。 使用undef禁用就地编辑。 |
$INPLACE_EDIT | |
$^M | 如果Perl死于内存不足错误,$ M的内容可以用作紧急内存池。 使用$ M需要Perl的特殊编译。 有关更多信息,请参阅INSTALL文档。 |
$^O | 包含为当前Perl二进制文件编译的操作系统的名称。 |
$OSNAME | |
$^P | 调试器清除的内部标志,以便它不会自行调试。 |
$PERLDB | |
$^T | 脚本开始运行的时间,从纪元开始的几秒钟内。 |
$BASETIME | |
$^W | 警告开关的当前值,无论是真还是假。 |
$WARNING | |
$^X | Perl二进制文件本身被执行的名称。 |
$EXECUTABLE_NAME | |
$ARGV | 从读取时包含当前文件的名称。 |
全局数组特殊变量
@ARGV | 包含用于脚本的命令行参数的数组。 |
@INC | 包含要由do,require或use构造评估的Perl脚本的场所列表的数组。 |
@F | 给出-a命令行开关时分割输入行的数组。 |
全局哈希特殊变量
%INC | 包含通过do或require包含的每个文件的文件名的条目的哈希。 |
%ENV | 包含当前环境的哈希。 |
%SIG | 用于为各种信号设置信号处理程序的哈希。 |
全球特殊文件句柄
ARGV | 在@ARGV中迭代命令行文件名的特殊文件句柄。 通常在<>中写为空文件句柄。 |
STDERR | 任何包中标准错误的特殊文件句柄。 |
STDIN | 任何包中标准输入的特殊文件句柄。 |
STDOUT | 任何包中标准输出的特殊文件句柄。 |
DATA | 特殊文件句柄,引用包含脚本的文件中__END__标记之后的任何内容。 或者,只要您正在读取同一个包__DATA__中的数据,就会在所需文件中的__DATA__标记之后的任何内容的特殊文件句柄。 |
_ (underscore) | 用于缓存上一个stat,lstat或文件测试运算符的信息的特殊文件句柄。 |
全球特殊常数
__END__ | 表示程序的逻辑结束。 忽略任何后续文本,但可以通过DATA文件句柄读取。 |
__FILE__ | 表示程序中使用它的位置的文件名。 不插入字符串。 |
__LINE__ | 表示当前行号。 不插入字符串。 |
__PACKAGE__ | 表示编译时的当前包名称,如果没有当前包,则表示未定义。 不插入字符串。 |
正则表达式特殊变量
$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 |