perl基础:perl中@_,和1,$2,...及其类似变量的含义

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),orarefundamentalintheoperationofcertainfacilitiesnomoresothan _ and @_.

-------------------------------------------

1.@_含义

1)是perl中认的数组变量

比如说你想移除数组中的一个元素赋值给一个 value1@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_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;      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   " 1\t 2\n";    输出结果是:4     7  

相关文章

1. 如何去重 #!/usr/bin/perl use strict; my %hash; while(...
最近写了一个perl脚本,实现的功能是将表格中其中两列的数据...
表的数据字典格式如下:如果手动写MySQL建表语句,确认麻烦,...
巡检类工作经常会出具日报,最近在原有日报的基础上又新增了...
在实际生产环境中,常常需要从后台日志中截取报文,报文的形...
最近写的一个perl程序,通过关键词匹配统计其出现的频率,让...