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 ...

如何看懂《Linux多线程服务端编程
while (running) \/\/running变量是个全局标志 { Functor task = taskQueue.take(); \/\/this blocks task(); \/\/在产品代码中需要考虑异常处理 } } \/\/ 创建容量(并发数)为N的线程池 int N = num_of_computing_threads; for (int i = 0; i < N; ++i) { create_thread(&workerThread); \/\/启动线程...

如何在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...

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

如何用程序启动erlang虚拟机
erl其实是个shell脚本,在erl脚本中它实际调用的是erlexec,这个程序的入口是erlexec.c。erlexec的main函数首先解析命令行传入的参数和环境变量,然后寻找beam可执行文件,然后就通过execv运行Beam虚拟机,erlexec就是个加载器,在这个过程中就会将命令行参数传递给虚拟机中的init进程。这个时候发现erlang就像是...

win 7 rabbitmq 需要安装哪些
1.现在先别装最新的 3.6.3 ,本人在安装完最新的版本,queue 队列有问题,降到了 3.6.2 就解决了。2.默认安装的Rabbit MQ 监听端口是:5672 配置 1、安装完以后erlang需要手动设置ERLANG_HOME 的系统变量。输入:set ERLANG_HOME=C:\\Program Files\\erl8.0 如下图所示:2、激活Rabbit MQ's ...

话务量如何计算
话务量公式为:A=Cxt。A是话务量,单位为erl(爱尔兰),C是呼叫次数,单位是个,t是每次呼叫平均占用时长,单位是小时。一般话务量又称小时呼,统计的时间范围是1个小时。高峰话务分为两种:一种是每天如期而至的常规性高峰话务,虽然有的是单峰,有的是多峰,但总体上是有规律的,可预测的。一种...

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

erlang创建自命名的节点的时候报错了!!
.erlang.cookie 需要放在 环境变量 HOME 所在目录。

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

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

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

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

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

东辽县18759137487: perl 中 $/ 代表了什么意思? -
爰敬五水: 自带的全局变量,默认值为“\n". perl中”行“的概念就由$/决定.{$data = "this>"; local $/ = ">"; chomp($data); }$data的值就是”this".

东辽县18759137487: perl中@$是什么意思 -
爰敬五水: 指向变量的数组,例如变量$reftrans的值为字符串'abc',那么@$reftrans就相当于@abc

东辽县18759137487: perl中“ - >”的用法 -
爰敬五水: 不能去掉,->代表的是取引用,数组 @a=(1,2,3), $a[0]=1 写成引用形式是$a=[1,2,3] 因此 $a->[0]=1, $RefCurrent是数组的引用类似于[1,2,3], @{$RefCurrent} 就是把引用转为数组,类似于@a, $RefCurUnit 就是数组@{$RefCurrent}中的一个元素,而这个元素本身又是一个引用.

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

东辽县18759137487: perl 中的my (@list) = @ - 是什么意思啊. -
爰敬五水: 在子程序中默认数组@_中保存了传变的变量 例 sub a {my @list=@_;}&a(1,2,3); 那么在子程序a中@_的数值就是(1,2,3);在子程序中也常用shift,例如:my $a=shift;这里shift将@_中第一个单元值赋予变量$a并删除(即$a=1),这个时候@_=(2,3).

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