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??????my
value=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_numbern";
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,"?paramsn";???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;??????printuc
line;
??}
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 ? "
1t
2n"; ?? 输出结果是:4 ? ? 7 ?