Perl 编程精髓:深入探索特殊变量的强大功能

Perl 语言以其强大的文本处理能力和简洁的语法而闻名,其中特殊变量是一组预定义的变量,在 Perl 程序的执行过程中扮演着重要的角色。以下是对 Perl 特殊变量的详细介绍:

图片[1]_Perl 编程精髓:深入探索特殊变量的强大功能_知途无界

一、全局标量特殊变量

  1. **∗​∗:默认输入和模式匹配空间。在许多函数中,如果没有指定变量,则默认使用。例如,在 foreach 循环、print 函数、模式匹配操作等场景中,都会默认使用 $
  2. **ARG∗∗:与_ 相同,都是默认输入和模式匹配内容。
  3. .∗∗或∗∗NR:当前输入文件的行号。每读取一行文件,行号就会递增。
  4. /∗∗或∗∗RS:输入记录分隔符,默认是新行字符。可以设置为其他字符或字符串,以改变输入记录的分隔方式。
  5. ,∗∗或∗∗OFS:输出域分隔符。在打印多个值时,用于分隔这些值。
  6. \*∗或∗∗ORS:输出记录分隔符。在打印记录时,用于分隔这些记录。默认是新行字符。
  7. $::断行字符,默认是“\n-”三个字符,但在大多数情况下不会直接使用这个变量。
  8. $!:这个变量的数字值是 errno 的值,字符串值是对应的系统错误字符串。用于获取上一个系统调用错误的描述。
  9. $@:命令 eval 的错误消息。如果为空,则表示上一次 eval 命令执行成功。
  10. $$:运行当前 Perl 脚本程序的进程号(PID)。
  11. $<:当前进程的实际用户号(真实用户ID)。
  12. $>:当前进程的有效用户号(有效用户ID)。
  13. $(:当前进程的实际组用户号(真实组ID)。
  14. $):当前进程的有效组用户号(有效组ID)。
  15. $[:数组的数组第一个元素的下标,默认是 0。但在现代 Perl 中,通常不需要修改这个值。
  16. $]:Perl 的版本号。返回版本加补丁级别除以 1000 的结果。
  17. $ARGV:当使用“<>”读文件时,保存当前文件名。这是特殊文件句柄 ARGV 的一个相关变量。

二、正则表达式特殊变量

  1. **n∗∗:包含上次模式匹配的第n个子串。例如,1 包含第一个括号中的匹配内容。
  2. $&:前一次成功模式匹配的字符串。
  3. $`:前次匹配成功的子串之前的内容。
  4. $’:前次匹配成功的子串之后的内容。
  5. **+∗∗:前一次使用括号的模式匹配的最后一个捕获组的内容。但请注意,在某些Perl版本或上下文中,+ 的行为可能有所不同或已被弃用。

三、文件句柄特殊变量

  1. $|:如果设置为非零值,则关闭缓冲。这意味着每次调用 write 或 print 函数时,都会立即将内容写入文件或输出设备,而不是先存储在缓冲区中。
  2. $%:当前输出页号(与 Perl 的格式系统相关,通常不直接使用)。
  3. $=:当前每页长度(同样与格式系统相关)。
  4. $-:当前页剩余的行数(与格式系统相关)。
  5. $~:当前报表输出格式的名称。默认值是文件句柄名。
  6. $^:当前报表输出表头格式的名称。默认值是带后缀“_TOP”的文件句柄名。

四、全局特殊数组变量

  1. @ARGV:保存命令行参数。这些参数是在命令行中传递给 Perl 脚本的。
  2. @INC:保存查找 Perl 程序的目录。这些目录是 Perl 在尝试加载模块或文件时搜索的路径。
  3. @_:在子程序内,这个数组变量包含传递给子程序的参数。

五、全局特殊哈希变量

  1. %INC:包含通过 do 或 require 语句包含的所有文件的信息。关键字是文件名,值是这个文件的路径。
  2. %ENV:包含当前环境变量。这些变量是从操作系统的环境中继承的,也可以在 Perl 脚本中设置或修改。
  3. %SIG:用于设置各种信号的信号处理程序的哈希。这允许你捕获和处理如中断信号(SIGINT)等操作系统信号。

六、全局特殊文件句柄

  1. ARGV:遍历数组变量 @ARGV 中的所有文件名的特殊文件句柄。通常与“<>”操作符一起使用来读取文件。
  2. STDERR:标准错误输出句柄。用于打印错误消息或调试信息。
  3. STDIN:标准输入句柄。用于从键盘或其他输入设备读取数据。
  4. STDOUT:标准输出句柄。用于打印正常输出或结果。
  5. DATA:特殊文件句柄,用于访问程序末尾的数据。这允许你在 Perl 脚本中嵌入数据,并在运行时读取它。

七、其他特殊变量

  1. __END___:表示程序的逻辑结尾。之后的任何文本都会被忽略,但可以通过 DATA 文件句柄读取。
  2. __FILE___:表示在程序中使用时的文件名。它不会被插入到字符串中。
  3. __LINE___:表示当前行号。它不会被插入到字符串中。
  4. __PACKAGE___:表示编译时的当前包名。如果没有当前包,则为 undefined。它不会被插入到字符串中。

了解并熟练使用这些特殊变量是成为一名高效 Perl 程序员的关键。它们提供了强大的功能和灵活性,使得 Perl 成为处理文本和数据的强大工具。

© 版权声明
THE END
喜欢就点个赞,支持一下吧!
点赞60 分享
No matter what label is thrown your way, only you can define your self.
不管你被贴上什么标签,只有你才能定义你自己
评论 抢沙发
头像
欢迎您留下评论!
提交
头像

昵称

取消
昵称表情代码图片

    暂无评论内容