Perl 简明教程
Perl - Special Variables
在 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
第一次执行循环时,将打印“山核桃”。第二次,打印“迪科里”,第三次,打印“doc”。这是因为在循环的每次迭代中,即使不指定,当前字符串也会放在 $ , and is used by default by print. Here are the places where Perl will assume $ 中 -
-
包括 ord 和 int 等函数在内的各种一元函数,以及除了 -t(默认为 STDIN)以外的所有文件测试(-f,-d)。
-
像
print
和unlink
这样的一些列表函数。 -
不使用
=~
运算符的模式匹配运算m//
、s///
和tr///
。 -
如果未提供其他变量,则用于
foreach
循环中的默认迭代器变量。 -
在
grep
和map
函数中的隐式迭代器变量。 -
当将行输入操作的结果自身用作 while 测试的唯一标准(即,)时,用于放置输入记录的默认位置。请注意,在 while 测试外部,这不会发生。
Special Variable Types
基于特殊变量的使用和性质,我们可以将其分类为以下类别 -
-
Global Scalar Special Variables.
-
Global Array Special Variables.
-
Global Hash Special Variables.
-
Global Special Filehandles.
-
Global Special Constants.
-
Regular Expression Special Variables.
-
Filehandle Special Variables.
Global Scalar Special Variables
以下是所有标量特殊变量的列表。我们已列出符号名称以及相应的类似英语的名称。
$_ |
默认输入和模式搜索空间。 |
$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 |
$) |
此进程的有效 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 |
$M 的内容可作为一个应急内存池,以防 Perl 因内存不足错误而死机。使用 $M 需要 Perl 的特殊编译。有关更多信息,请参阅 INSTALL 文档。 |
$^O |
包含当前 Perl 二进制文件编译所用操作系统名称。 |
$OSNAME |
$^P |
调试器清除的内部标志,以便其不调试自身。 |
$PERLDB |
$^T |
以时代时间(自纪元以来的秒数)表示的脚本开始运行的时间。 |
$BASETIME |
$^W |
警告开关的当前值,为 true 或 false。 |
$WARNING |
$^X |
Perl 二进制文件自身作为的名称。 |
$EXECUTABLE_NAME |
Global Array Special Variables
@ARGV |
包含打算给脚本的命令行参数的数组。 |
@INC |
包含查找 Perl 脚本的地方的列表的数组,该列表将由 do、require 或 use 结构来评估。 |
@F |
当给定 -a 命令行开关时,输入行将拆分为其中的数组。 |
Global Hash Special Variables
%INC |
包含已通过 do 或 require 包含的每个文件的的文件名的条目的散列。 |
%ENV |
包含您当前环境的散列。 |
%SIG |
用于为各种信号设置信号处理程序的散列。 |
Global Special Filehandles
ARGV |
在 @ARGV 中迭代命令行文件名的特殊文件句柄。通常写为 <中的空文件句柄。 |
STDERR |
在任何程序包中用于标准错误的特殊文件句柄。 |
STDIN |
在任何程序包中用于标准输入的特殊文件句柄。 |
STDOUT |
在任何程序包中用于标准输出的特殊文件句柄。 |
DATA |
引用脚本所含文件中的 END 标记后面的任何内容的特殊文件句柄。或者,引用必需文件中的 DATA 标记后面的任何内容的特殊文件句柄,只要您在 DATA 位于其中读取数据包即可。 |
_ (underscore) |
用于缓存来自上次 stat、lstat 或文件测试运算符的信息的特殊文件句柄。 |
Global Special Constants
END |
表示程序的逻辑结束。任何以下文本都将被忽略,但可以通过 DATA 文件句柄读取。 |
FILE |
表示在程序中使用它的点处的文件名。不插值到字符串中。 |
LINE |
表示当前行号。不插值到字符串中。 |
PACKAGE |
表示编译时的当前包名,如果不存在当前包,则未定义。不插值到字符串中。 |
Regular Expression Special Variables
$digit |
包含在上次匹配的模式中相应的括号集中匹配的文本。例如,$1 与先前正则表达式中第一组括号中包含的内容匹配。 |
$& |
上一次成功模式匹配匹配到的字符串。 |
$MATCH |
$` |
上一次成功模式匹配匹配到的任何字符串前面的字符串。 |
$PREMATCH |
$' |
上一次成功模式匹配匹配到的任何字符串后面的字符串。 |
$POSTMATCH |
$+ |
上一次搜索模式匹配到的最后一个方括号。如果你不知道一组备用模式中哪个是匹配的,这将很有用。例如:/Version: (.*) |
Revision: (.*)/ && ($rev = $+); |
Filehandle Special Variables
$ |
如果设置为非零,则在当前选择的输出通道上的每次写入或打印之后强制执行 fflush(3)。 |
|
$OUTPUT_AUTOFLUSH |
$% |
当前选择的输出通道的当前页码。 |
$FORMAT_PAGE_NUMBER |
$= |
The current page length (printable lines) of the currently selected output channel. Default is 60. |
$FORMAT_LINES_PER_PAGE |
$- |
当前选定的输出通道中页面上剩余的行数。 |
$FORMAT_LINES_LEFT |
$~ |
当前选定的输出通道的当前报告格式名称。默认值为文件号的名称。 |
$FORMAT_NAME |
$^ |
当前选定的输出通道的当前页首格式名称。默认值为添加了“_TOP”的文件号的名称。 |