Perl's a great language for special variables - variables that are set up without the programmer having to intervene and providing information ranging from the number of lines read from the current input file (.)throughthecurrentprocessID()andtheoperatingsystem(^O). Other special variables effect how certain operations are performed (|controllingoutputbuffering/flushing,forexample),orarefundamentalintheoperationofcertainfacilities−nomoresothan_ and @_.
-------------------------------------------
1.@_含义
1)是perl中默认的数组变量
比如说你想移除数组中的一个元素赋值给一个变value方法1:你可以定义某个数组如@abcd myvalue=shift
@abcd;
方法2:你没有定义任何数组
my $value=shift @_; 和上例等效
这里perl会隐式的选择@_
2)是sub子函数中的默认参数列表.
例如:
sub funct($$) {
($param1, $param2) = @_;
#Statement
}
再例如,有下面一段代码:
my max_number = &max(1,2); print "1 and 2 ,the max number ismax_number\n";
sub max{
my (num1,num2)
= @_[0,1]; ## 取出参数列表中的元素。
........此处省略求max运算
}
在子函数中直接shift; 就可以从@_的前端弹出一个元素.
shift;
等于
shift @_;
-------------------------
@_ is the list of incoming parameters to a sub. So if you
write a sub, you refer to the first parameter in it as $_[0], the second
parameter as $_[1] and so on. And you can refer to $#_ as
the index number of the last parameter:
sub demo {
print "Called with ",#_+1," params\n"; print "First param was_[0]\n";
Note that the English module adds in the ability to refer to the special
variables by other longer, but easier to remember, names such as @ARG for @_ and PIDfor$.
But use English; can have a detrimental performance effect if you're matching regular expressions against long incoming strings
2.$_含义
1)为默认列表变量。在一个命令没有任何参数的时候,表示它从默认变量里读取。例如:print;等于print_;
2)默认模式匹配空间(pattern matching space)
s/.../.../;
等于
$_ =~ s/.../.../;
---------------------------
Then any regular expression matches, chops (and lcs
and many more) without a parameter, and even prints assume you want to
work on .Thus:while(line
= <FH>) {
if (line= /Perl/) printFHO$line; printucline;
}
Shortens to:
while (<FH>) {
/Perl/ and
print FHO ;
print uc;
}
3.1,2,...等含义
以数字为名的变量保存的是上一次匹配操作(/pattern/)中,第n个小括号中的原符号所匹配内容。
1就是第一对小括号中的原符号所对应的匹配内容。2就是第二对小括号中的原符号所对应的匹配内容。
内插功能:
str = "aaa4zzz7bbb";str =~ /(\d)z{3}(\d)/;print "1\t2\n";
输出结果是:4 7
本文介绍了Perl语言中的两个重要特殊变量@_和$_的功能与用法。@_作为默认的参数列表,常用于子函数中接收传入参数;而$_则作为默认的操作变量,简化了诸如打印、正则表达式匹配等操作。
8834

被折叠的 条评论
为什么被折叠?



