Perl 特殊变量

  • 特殊变量

    Perl 中有一些具有预定义和特殊含义的变量。它们是在常规变量指示符($,@或%)之后使用标点符号的变量,例如$_(在下面说明)。 大多数特殊变量的名称都像英文一样长,例如,操作系统错误变量$!。可以写为$OS_ERROR。但是,如果您要使用英语(如名称),那么您将不得不使用英语一行。在程序文件的顶部。这将引导解释器理解变量的确切含义。最常用的特殊变量是$_,它包含默认输入和模式搜索字符串。例如,在以下几行中-
  • if 语句

    当需要检查语句的返回值时,if语句是显而易见的选择。例如-
    
    foreach ('hickory','dickory','doc') {
       print $_;
       print "\n";
    }
    
    尝试一下
    再次,让我们检查相同的示例,而无需显式使用$_变量-
    
    foreach ('hickory','dickory','doc') {
       print;
       print "\n";
    }
    
    尝试一下
    第一次执行循环时,将打印“hickory”。第二次打印“dickory”,第三次打印“doc”。这是因为在循环的每次迭代中,当前字符串都放在$_中,并且在默认情况下由print使用。这是Perl即使不指定$_也会假设$_保存的地方-
    • 各种一元函数,包括ord和int之类的函数,以及除-t外的所有文件测试(-f,-d),默认情况下为STDIN。
    • 各种列表功能,例如打印和取消链接。
    • 当不使用=~运算符时,模式匹配操作m//,s///和tr///。
    • 如果未提供其他变量,则为foreach循环中的默认迭代器变量。
    • grep和map函数中的隐式迭代器变量。
    • 单独测试行输入操作的结果时,放置输入记录的默认位置是while测试(即)的唯一标准。请注意,在一段时间测试之外,不会发生这种情况。
  • 特殊变量类型

    根据特殊变量的用法和性质,我们可以将其分类为以下几类:
    • 全局标量特殊变量。
    • 全局数组特殊变量。
    • 全局哈希特殊变量。
    • 全局特殊文件句柄。
    • 全局特殊常数。
    • 正则表达式特殊变量。
    • 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 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
    $) 这个过程的有效指导。
    $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 如果Perl因内存不足错误而死,则$M的内容可用作紧急内存池。 使用$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 包含您当前环境的哈希。
    %SIG 用于为各种信号设置信号处理程序的哈希。
  • 全局哈希特殊变量

    变量 说明
    %INC 散列包含通过do或require包含的每个文件的文件名条目。
    %ENV 包含您当前环境的哈希。
    %SIG 用于为各种信号设置信号处理程序的哈希。
  • 全局特殊文件句柄

    变量 说明
    ARGV 遍历@ARGV中的命令行文件名的特殊文件句柄。 通常写为<>中的空文件句柄。
    STDERR 任何软件包中用于标准错误的特殊文件句柄。
    STDIN 任何包装中用于标准输入的特殊文件句柄。
    STDOUT 任何包中用于标准输出的特殊文件句柄。
    DATA 特殊文件句柄,它引用包含脚本的文件中__END__令牌后的所有内容。 或者,只要找到的是同一包__DATA__中的数据,就可以找到所需文件中紧随__DATA__令牌之后的所有内容的特殊文件句柄。
    _ (下划线) 特殊的文件句柄,用于缓存来自最后一个stat,lstat或file test运算符的信息。
  • 全局特特殊常数

    常量 说明
    __END__ 指示程序的逻辑结束。 以下任何文本均将被忽略,但可以通过DATA文件句柄读取。
    __FILE__ 代表文件名在程序中的使用位置。 不插值到字符串中。
    __LINE__ 代表当前行号。 不插值到字符串中。
    __PACKAGE__ 表示编译时的当前软件包名称,如果没有当前软件包,则为undefined。 不插值到字符串中。
  • 正则表达式特殊变量

    变量 说明
    $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