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

作者&投稿:单邢 (若有异议请与网页底部的电邮联系)
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" 仅有唯一条件,且该条件是对 ""
操作的结果进行测试时,$_ 就是存放输入记录的默认位置。除了
"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] 代表当前匹配的正则表达式在被匹配的字符串中的起始和终止的位置

1.@_ 是函数传参时放置参数的数组,可以从中取实参,
比如 my($para1,$para2...)=@_, 函数调用时填了几个参数,便可以从该数组中取到几个参数。
2.$_ 是默认参数的意思,指的是在不指定的情况下,程序处理的上一个变量,比如
open(IN,"<file.txt")
while()
{
print $_;
}
close(IN);
这个例子是打开一个文本文件,读取每一行,在没有指定参数的情况下,$_当时指向了从文件中读取的每一行。

@_ 在某个函数内,数组 @_ 包含传递给该函数的所有参数。
$_ 默认的输入/输出和格式匹配空间
--------------------------------------------------------------------------------------------------------
@_的示例:
#!/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] 代表当前匹配的正则表达式在被匹配的字符串中的起始和终止的位置



WINDOWS环境下配置ERLANG的环境变量
在环境变量中 新建一个变量 erl_home 值为 本机erlang的目录。然后在用户变量PATH 中添加 %erl_home%\\BIN 参考: WINDOWS环境下配置ERLANG的环境变量

Erlang怎么安装?Windows下erlang otp 21安装步骤详解+环境变量...
配置系统环境:1、打开计算机→属性→高级系统设置→高级→环境变量 2、新建一个系统变量:名称ERLANG_HOME,值为本机中erlang的安装目录。   然后再在用户变量PATH中添加上%ERLANG_HOME%\\bin;3、查看安装是否成功:cmd然后erl -version ...

如何在windows下突破Rabbitmq的socket限制
{sockets_limit,829}, 默认的限制sockets数为829 {sockets_used,22}]},{processes,[{limit,1048576},{used,388}]},{run_queue,0},{uptime,72329}]1、 如何在windows下扩展sockets数量,提高吞吐量?(1)、需要在windows系统环境变量中设置erlang的ERL_MAX_PORTS    (2)重启Rabb...

makefile中“${MODS:%=%.beam}”是什么含义?
在楼主的例子中${MODS:%=%.beam} 第一个%没有带任何过滤条件.%则表示任意字符串.第二个%表示在字符串后面添加一个 .beam${MODS:%=%.beam} 的意思是把为变量添加一个 .beam 后缀 makefile——小例子:《Erlang程序设计》第六章中的例子:hello.erl-module(hello).-export([start\/0]).start...

如何让WINCE系统启动直接运行自己的程序
它们之间的共享变量只需简单利用extern关键字申明便可 相互之间进行访问,而在Windows CE 6.0中,由于内核(kernel)、OAL和KITL被编译成不同的可执行文件,变量之间的相互访问无法使用extern关键字实现共享,即内核无法使 用extern DWORD varX方法访问OAL层的变量varX,当然OAL层的实现体同样无法通过同样的方式访问内核变量...

如何在windows下突破Rabbitmq的socket限制
在windows下扩展sockets数量,提高吞吐量?(1)、需要在windows系统环境变量中设置erlang的ERL_MAX_PORTS (2)重启RabbitMQ服务才能正式生效

请问makefile中 ${MODS:%=%.beam} 是什么含义?
object: $(var:%.c=%.o)这个时候 %分别等于 main 与 onvif 而 object 则等于 main.o 与 onvif.o 在楼主的例子中${MODS:%=%.beam} 第一个%没有带任何过滤条件.%则表示任意字符串.第二个%表示在字符串后面添加一个 .beam {MODS:%=%.beam} 的意思是把为变量添加一个 .beam 后缀 ...

马村区17649601545: Perl中的默认变量@ - 和$ - 什么意思? -
穆功海斯: @_ 在某个函数内,数组 @_ 包含传递给该函数的所有参数. $_ 默认的输入/输出和格式匹配空间 -------------------------------------------------------------------------------------------------------- @_的示例: #!/bin/perl -w use strict; &fun( 111,222,333 ); sub fun() { ...

马村区17649601545: perl @ - $ - 是什么意思啊 -
穆功海斯: 1.@_ 是函数传参时放置参数的数组,可以从中取实参,比如 my($para1,$para2...)=@_, 函数调用时填了几个参数,便可以从该数组中取到几个参数.2.$_ 是默认参数的意思,指的是在不指定的情况下,程序处理的上一个变量,比如 open(IN,"<file.txt") while(<IN>) { print $_; } close(IN); 这个例子是打开一个文本文件,读取每一行,在没有指定参数的情况下,$_当时指向了从文件中读取的每一行.

马村区17649601545: perl语言中$$是什么意思 -
穆功海斯: $$ Perl解释器的进程ID.补充:$组合还有很多标记:$! 根据上下文内容返回错误号或者错误串.$” 列表分隔符.$# 打印数字时默认的数字输出格式.$% 当前输出通道的当前页号.$& 与上个格式匹配的字符串.$( 当前进程的组ID$) 当前进程的有效组ID.$* 设置1表示处理多行格式.现在多以/s和/m修饰符取代之.$, 当前输出字段分隔符.$. 上次阅读的文件的当前输入行号.$/ 当前输入记录分隔符,默认情况是新行.$: 字符设置,此后的字符串将被分开,以填充连续的字段.

马村区17649601545: perl 中$ - @argv <stdin> 的区别 -
穆功海斯: $_:默认变量,比如for循环里可用$_,很多函数也以$_作为默认参数 @ARGV:命令行参数,类似C的argv[],第一个参数不是函数名<stdin>:标准输入流,<FD>表示文件句柄FD的输出流,用于读取标准输入/文件的输入,用法:@a = <stdin> 一次读取所有输入到@a中$a = <stdin> 每次读取一行到$a中

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

马村区17649601545: perl 中 $/ 代表了什么意思? -
穆功海斯: 自带的全局变量,默认值为“\n". perl中”行“的概念就由$/决定.{$data = "this>"; local $/ = ">"; chomp($data); }$data的值就是”this".

马村区17649601545: perl中@$是什么意思 -
穆功海斯: 指向变量的数组,例如变量$reftrans的值为字符串'abc',那么@$reftrans就相当于@abc

马村区17649601545: perl中“ - >”的用法 -
穆功海斯: 不能去掉,->代表的是取引用,数组 @a=(1,2,3), $a[0]=1 写成引用形式是$a=[1,2,3] 因此 $a->[0]=1, $RefCurrent是数组的引用类似于[1,2,3], @{$RefCurrent} 就是把引用转为数组,类似于@a, $RefCurUnit 就是数组@{$RefCurrent}中的一个元素,而这个元素本身又是一个引用.

马村区17649601545: perl 程序中$?代表什么? -
穆功海斯: 当你的 perl 程序呼叫*外部(perl script以外的) 程序, 而又发生错误时, $? 就会设成一 2 byte 的非 0 值字串, 第 1 byte 是外部程序的 exit code ( 如 1 代表 错误 ) 第 2 byte 就是本程序的处理手法 ( 如 die, warn 之类的 )*如 $x = `xcopy C:\*.* D:\*.*"; 这里 xcopy 就是一个外部程序

马村区17649601545: 请问下载perl里面这个参数@ - 要怎么用?最好能举个简单的例子示范下!谢谢 -
穆功海斯: @_是子程序的一个私有变量◆;如果有一个全局变量@_,它将在此子程序调用前存储起来,当子程序调用完成后,其早期的值会被重新赋还给@_◆.这意味着当将参数传递给子程序时不用担心它会影响此程序中其它子程序的@_这个变量的值.嵌套的子程序调用时,@_的值和上述类似.甚至此子程序递归调用时,每一次调用将得到新的@_,因此子程序调用 时将得到其自身的参数列表.sub max { my($m,$n); #新的,私有变量($m,$n) = @_; #赋值 if($m > $n) {$m} else{$n} } 简单来说@_就是记录最后的数组

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网