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 $ 中 -

  1. 包括 ord 和 int 等函数在内的各种一元函数,以及除了 -t(默认为 STDIN)以外的所有文件测试(-f,-d)。

  2. printunlink 这样的一些列表函数。

  3. 不使用 =~ 运算符的模式匹配运算 m//s///tr///

  4. 如果未提供其他变量,则用于 foreach 循环中的默认迭代器变量。

  5. grepmap 函数中的隐式迭代器变量。

  6. 当将行输入操作的结果自身用作 while 测试的唯一标准(即,)时,用于放置输入记录的默认位置。请注意,在 while 测试外部,这不会发生。

Special Variable Types

基于特殊变量的使用和性质,我们可以将其分类为以下类别 -

  1. Global Scalar Special Variables.

  2. Global Array Special Variables.

  3. Global Hash Special Variables.

  4. Global Special Filehandles.

  5. Global Special Constants.

  6. Regular Expression Special Variables.

  7. Filehandle Special Variables.

Global Scalar Special Variables

以下是所有标量特殊变量的列表。我们已列出符号名称以及相应的类似英语的名称。

$_

默认输入和模式搜索空间。

$ARG

$.

最后读取的文件句柄的当前输入行号。在文件句柄上显式关闭会重置行号。

$NR

$/

输入记录分隔符;默认为换行符。如果设置为空字符串,它将空白行视为分隔符。

$RS

$,

用于 print 运算符的输出字段分隔符。

$OFS

`$

` 用于 print 运算符的输出记录分隔符。

$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”的文件号的名称。