Perl中的默认变量@_和$_什么意思?

如题所述

@_ 在某个函数内,数组 @_ 包含传递给该函数的所有参数。
$_ 默认的输入/输出和格式匹配空间
--------------------------------------------------------------------------------------------------------
@_的示例:
#!/bin/perl -w
use strict;
&fun( 111,222,333 );
sub fun()
{
print @_;
}
这里会把传入函数的参数111222333打印出来。
---------------------------------------------------------------------------------------------
$_示例:
下面的几对代码都是等同的:
while (<>) {...} # equivalent only in while!
while (defined($_ = <>)) {...}

/^Subject:/
$_ =~ /^Subject:/

tr/a-z/A-Z/
$_ =~ tr/a-z/A-Z/

chomp
chomp($_)

以下是几处即使没有写明 Perl 也会假定使用 $_ 的地方:

* 各种单目函数,包括像 ord() 和 int() 这样的函数以及除 "-t"
以外所有的文件 测试操作 ("-f","-d"),"-t" 默认操作 STDIN。

* 各种列表函数,例如 print() 和 unlink()。

* 没有使用 "=~" 运算符时的模式匹配操作 "m//"、"s///" 和
"tr///"。

* 在没有给出其他变量时是 "foreach" 循环的默认迭代变量。

* grep() 和 map() 函数的隐含迭代变量。

* 当 "while" 仅有唯一条件,且该条件是对 "<FH>"
操作的结果进行测试时,$_ 就是存放输入记录的默认位置。除了
"while" 测试条件之外不会发生这种情况。

(助记:下划线在特定操作中是可以省略的。)
--------------------------------------------------------------------------------------------------
@_和$_都是perl很常用的特殊变量。建议系统看一下《perl语言入门》。
----------------------------------------------------------------------------------------------------------------
另附perl常用特殊变量列表:
perl 内置变量

$- 当前页可打印的行数,属于Perl格式系统的一部分

$! 根据上下文内容返回错误号或者错误串

$” 列表分隔符

$# 打印数字时默认的数字输出格式

$$ Perl解释器的进程ID

$% 当前输出通道的当前页号

$& 与上个格式匹配的字符串

$( 当前进程的组ID

$) 当前进程的有效组ID

$* 设置1表示处理多行格式.现在多以/s和/m修饰符取代之.

$, 当前输出字段分隔符

$. 上次阅读的文件的当前输入行号

$/ 当前输入记录分隔符,默认情况是新行

$: 字符设置,此后的字符串将被分开,以填充连续的字段.

$; 在仿真多维数组时使用的分隔符.

$? 返回上一个外部命令的状态

$@ Perl解释器从eval语句返回的错误消息

$[ 数组中第一个元素的索引号

$\ 当前输出记录的分隔符

$] Perl解释器的子版本号

$^ 当前通道最上面的页面输出格式名字

$^A 打印前用于保存格式化数据的变量

$^D 调试标志的值

$^E 在非UNIX环境中的操作系统扩展错误信息

$^F 最大的文件捆述符数值

$^H 由编译器激活的语法检查状态

$^I 内置控制编辑器的值

$^L 发送到输出通道的走纸换页符

$^M 备用内存池的大小

$^O 操作系统名

$^P 指定当前调试值的内部变量

$^R 正则表达式块的上次求值结果

$^S 当前解释器状态

$^T 从新世纪开始算起,脚步本以秒计算的开始运行的时间

$^W 警告开关的当前值

$^X Perl二进制可执行代码的名字

$_ 默认的输入/输出和格式匹配空间

$| 控制对当前选择的输出文件句柄的缓冲

$~ 当前报告格式的名字

$` 在上个格式匹配信息前的字符串

$’ 在上个格式匹配信息后的字符串

$+ 与上个正则表达式搜索格式匹配的最后一个括号

$< 当前执行解释器的用户的真实ID

$ 含有与上个匹配正则表达式对应括号结果

$= 当前页面可打印行的数目

$> 当前进程的有效用户ID

包含正在执行的脚本的文件名

$ARGV 从默认的文件句柄中读取时的当前文件名

%ENV 环境变量列表

%INC 通过do或require包含的文件列表

%SIG 信号列表及其处理方式

@_ 传给子程序的参数列表

@ARGV 传给脚本的命令行参数列表

@INC 在导入模块时需要搜索的目录列表

$-[0]和$+[0] 代表当前匹配的正则表达式在被匹配的字符串中的起始和终止的位置
温馨提示:内容为网友见解,仅供参考
无其他回答

Perl中的默认变量@_和$_什么意思?
在没有给出其他变量时是 "foreach" 循环的默认迭代变量。grep() 和 map() 函数的隐含迭代变量。当 "while" 仅有唯一条件,且该条件是对 "<FH>"操作的结果进行测试时,$_ 就是存放输入记录的默认位置。除了 "while" 测试条件之外不会发生这种情况。(助记:下划线在特定操作中是可以省略的。)--...

perl @_ $_ 是什么意思啊
2.$_ 是默认参数的意思,指的是在不指定的情况下,程序处理的上一个变量,比如 open(IN,"<file.txt")while(<IN>){ print $_;} close(IN);这个例子是打开一个文本文件,读取每一行,在没有指定参数的情况下,$_当时指向了从文件中读取的每一行。

perl @_是什么意思
是perl中默认的数组变量 我举个例子吧 。 比如说你想移除数组中的一个元素赋值给一个变$value 1、你有定义某个数组如@abcd my $value=shift @abcd;2、你没有定义任何数组 my $value=shift @_; 和上例等效 这里perl会隐式的选择@_

【perl】基本语法三
数组的使用 在Perl中,数组通过`@`表示,单独引用数组元素时需要使用`$`。数组元素默认以空格分隔,修改默认值使用特殊变量`$"`。数组中未定义的值为`undef`。数组最后一个数通过`$grades[$#grades]=$grades[-1]`实现,范围操作符`..`仅允许向上计数。Perl中使用`qw`进行简写。列表的赋值与操作 ...

我是perl新手,请问perl 中的~是什么意思,有没有关于所有perl的符号解释...
ARG,常常是一个默认变量 2. @_ARG,子例程参数表 3. {row.content} PROGRAM_NAME,本程序的名字 4. @ARGV 本程序的命令行参数表 5. $"LIST_SEPARATOR,数组内插到双引号字符串中时所用的分隔符,默认为空格 6. $,OFS,或$OUTPUT_FIELD_SEPARATOR,用于print的输出字段分隔符,即一个print...

Perl 函数 参数 $$, $$$,$@
+ 类似于 $ 但是当遇到数组变量或 hash 变量时表示 \\[@%],在其它情况下总是提供 scalar context。它适用于可以接收数组变量或数组引用为参数的函数:sub mypush (+@) { # 5.14 中 push 第一个参数可以为数组的引用 my $aref = shift;die "Not an arrayref" unless ref $aref eq 'ARRAY...

perl中@$是什么意思
指向变量的数组,例如变量$reftrans的值为字符串'abc',那么@$reftrans就相当于@abc

perl语言中$$是什么意思
好象是动态变量,快10年前用过的东西了,记不清楚了。比方:$opt_t 的值是字符串 abc task_id 的值是字符串 def 那么$$task_id=$opt_t以后 def 的值就是字符串 abc 好象是这样的,我记得PERL里的变量有类似的用法,很奇怪,其他语言里没有的。

perl $@ 这个是什么意思。
PERL内置变量,Perl解释器从eval语句返回的错误消息 代码 eval { $answer = $a \/ $b; }; warn $@ if $@;正确执行后,系统变量$@为空串,如果有错误,$@中为错误信息。

perl 中的my (@list) = @_是什么意思啊。
其实@_就是默认数组。它会根据语言环境自动获取某些变量或数组,这样的好处是语言的灵活性很大,同时也会让初学者很容易迷惑。你多动手试试,多用用就好了。这个是常用的特殊变量。要熟练掌握的。

相似回答