Perl中的默认变量@_和$_什么意思?
发布网友
发布时间:2022-04-22 03:23
我来回答
共1个回答
热心网友
时间:2023-09-09 22:49
@_ 在某个函数内,数组 @_ 包含传递给该函数的所有参数。\x0d\x0a$_ 默认的输入/输出和格式匹配空间\x0d\x0a--------------------------------------------------------------------------------------------------------\x0d\x0a@_的示例:\x0d\x0a#!/bin/perl -w\x0d\x0ause strict;\x0d\x0a&fun( 111,222,333 );\x0d\x0asub fun()\x0d\x0a{\x0d\x0a print @_;\x0d\x0a}\x0d\x0a这里会把传入函数的参数111222333打印出来。\x0d\x0a---------------------------------------------------------------------------------------------\x0d\x0a$_示例:\x0d\x0a下面的几对代码都是等同的:\x0d\x0awhile (<>) {...} # equivalent only in while!\x0d\x0a while (defined($_ = <>)) {...}\x0d\x0a\x0d\x0a /^Subject:/\x0d\x0a $_ =~ /^Subject:/\x0d\x0a\x0d\x0a tr/a-z/A-Z/\x0d\x0a $_ =~ tr/a-z/A-Z/\x0d\x0a\x0d\x0achomp\x0d\x0a chomp($_)\x0d\x0a\x0d\x0a 以下是几处即使没有写明 Perl 也会假定使用 $_ 的地方:\x0d\x0a\x0d\x0a * 各种单目函数,包括像 ord() 和 int() 这样的函数以及除 "-t"\x0d\x0a 以外所有的文件 测试操作 ("-f","-d"),"-t" 默认操作 STDIN。\x0d\x0a\x0d\x0a * 各种列表函数,例如 print() 和 unlink()。\x0d\x0a\x0d\x0a * 没有使用 "=~" 运算符时的模式匹配操作 "m//"、"s///" 和\x0d\x0a "tr///"。\x0d\x0a\x0d\x0a * 在没有给出其他变量时是 "foreach" 循环的默认迭代变量。\x0d\x0a\x0d\x0a * grep() 和 map() 函数的隐含迭代变量。\x0d\x0a\x0d\x0a * 当 "while" 仅有唯一条件,且该条件是对 "
"\x0d\x0a 操作的结果进行测试时,$_ 就是存放输入记录的默认位置。除了\x0d\x0a "while" 测试条件之外不会发生这种情况。\x0d\x0a\x0d\x0a (助记:下划线在特定操作中是可以省略的。)\x0d\x0a--------------------------------------------------------------------------------------------------\x0d\x0a@_和$_都是perl很常用的特殊变量。建议系统看一下《perl语言入门》。\x0d\x0a----------------------------------------------------------------------------------------------------------------\x0d\x0a另附perl常用特殊变量列表:\x0d\x0aperl 内置变量\x0d\x0a\x0d\x0a$- 当前页可打印的行数,属于Perl格式系统的一部分\x0d\x0a\x0d\x0a$! 根据上下文内容返回错误号或者错误串\x0d\x0a\x0d\x0a$” 列表分隔符\x0d\x0a\x0d\x0a$# 打印数字时默认的数字输出格式\x0d\x0a\x0d\x0a$$ Perl解释器的进程ID\x0d\x0a\x0d\x0a$% 当前输出通道的当前页号\x0d\x0a\x0d\x0a$& 与上个格式匹配的字符串\x0d\x0a\x0d\x0a$( 当前进程的组ID\x0d\x0a\x0d\x0a$) 当前进程的有效组ID\x0d\x0a\x0d\x0a$* 设置1表示处理多行格式.现在多以/s和/m修饰符取代之.\x0d\x0a\x0d\x0a$, 当前输出字段分隔符\x0d\x0a\x0d\x0a$. 上次阅读的文件的当前输入行号\x0d\x0a\x0d\x0a$/ 当前输入记录分隔符,默认情况是新行\x0d\x0a\x0d\x0a$: 字符设置,此后的字符串将被分开,以填充连续的字段.\x0d\x0a\x0d\x0a$; 在仿真*数组时使用的分隔符.\x0d\x0a\x0d\x0a$? 返回上一个外部命令的状态\x0d\x0a\x0d\x0a$@ Perl解释器从eval语句返回的错误消息\x0d\x0a\x0d\x0a$[ 数组中第一个元素的索引号\x0d\x0a\x0d\x0a$\ 当前输出记录的分隔符\x0d\x0a\x0d\x0a$] Perl解释器的子版本号\x0d\x0a\x0d\x0a$^ 当前通道最上面的页面输出格式名字\x0d\x0a\x0d\x0a$^A 打印前用于保存格式化数据的变量\x0d\x0a\x0d\x0a$^D 调试标志的值\x0d\x0a\x0d\x0a$^E 在非UNIX环境中的操作系统扩展错误信息\x0d\x0a\x0d\x0a$^F 最大的文件捆述符数值\x0d\x0a\x0d\x0a$^H 由编译器激活的语法检查状态\x0d\x0a\x0d\x0a$^I 内置控制编辑器的值\x0d\x0a\x0d\x0a$^L 发送到输出通道的走纸换页符\x0d\x0a\x0d\x0a$^M 备用内存池的大小\x0d\x0a\x0d\x0a$^O 操作系统名\x0d\x0a\x0d\x0a$^P 指定当前调试值的内部变量\x0d\x0a\x0d\x0a$^R 正则表达式块的上次求值结果\x0d\x0a\x0d\x0a$^S 当前解释器状态\x0d\x0a\x0d\x0a$^T 从新世纪开始算起,脚步本以秒计算的开始运行的时间\x0d\x0a\x0d\x0a$^W 警告开关的当前值\x0d\x0a\x0d\x0a$^X Perl二进制可执行代码的名字\x0d\x0a\x0d\x0a$_ 默认的输入/输出和格式匹配空间\x0d\x0a\x0d\x0a$| 控制对当前选择的输出文件句柄的缓冲\x0d\x0a\x0d\x0a$~ 当前报告格式的名字\x0d\x0a\x0d\x0a$` 在上个格式匹配信息前的字符串\x0d\x0a\x0d\x0a$’ 在上个格式匹配信息后的字符串\x0d\x0a\x0d\x0a$+ 与上个正则表达式搜索格式匹配的最后一个括号\x0d\x0a\x0d\x0a$< 当前执行解释器的用户的真实ID\x0d\x0a\x0d\x0a$ 含有与上个匹配正则表达式对应括号结果\x0d\x0a\x0d\x0a$= 当前页面可打印行的数目\x0d\x0a\x0d\x0a$>当前进程的有效用户ID\x0d\x0a\x0d\x0a包含正在执行的脚本的文件名\x0d\x0a\x0d\x0a$ARGV 从默认的文件句柄中读取时的当前文件名\x0d\x0a\x0d\x0a%ENV 环境变量列表\x0d\x0a\x0d\x0a%INC 通过do或require包含的文件列表\x0d\x0a\x0d\x0a%SIG 信号列表及其处理方式\x0d\x0a\x0d\x0a@_ 传给子程序的参数列表\x0d\x0a\x0d\x0a@ARGV 传给脚本的命令行参数列表\x0d\x0a\x0d\x0a@INC 在导入模块时需要搜索的目录列表\x0d\x0a\x0d\x0a$-[0]和$+[0] 代表当前匹配的正则表达式在被匹配的字符串中的起始和终止的位置