当前位置: 首页 > 文档资料 > Perl 入门教程 >

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包含由某些实用模块启用的内部编译器提示。
$^Iinplace-edit扩展的当前值。 使用undef禁用就地编辑。
$INPLACE_EDIT
$^M如果Perl死于内存不足错误,$ M的内容可以用作紧急内存池。 使用$ M需要Perl的特殊编译。 有关更多信息,请参阅INSTALL文档。
$^O包含为当前Perl二进制文件编译的操作系统的名称。
$OSNAME
$^P调试器清除的内部标志,以便它不会自行调试。
$PERLDB
$^T脚本开始运行的时间,从纪元开始的几秒钟内。
$BASETIME
$^W警告开关的当前值,无论是真还是假。
$WARNING
$^XPerl二进制文件本身被执行的名称。
$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