linghu2049的个人博客分享 http://blog.sciencenet.cn/u/linghu2049

博文

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

已有 27271 次阅读 2011-10-17 22:10 |个人分类:perl|系统分类:科研笔记|关键词:学者| Perl

 

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 ($.) through the current process ID ($$) and the operating system ($^O). Other special variables effect how certain operations are performed ($| controlling output buffering / flushing, for example), or are fundamental in the operation of certain facilities - no more so than $_ 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 is $max_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 $PID for $$. 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/) {
    print FHO $line;
    }
  print uc $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$2n";  

输出结果是:4     7  


https://m.sciencenet.cn/blog-634847-497909.html

上一篇:perl基础:调用linux系统命令并批量处理文件问题(原创)
下一篇:Perl教学视频-探索Perl的世界-Superor作品

0

该博文允许注册用户评论 请点击登录 评论 (0 个评论)

数据加载中...
扫一扫,分享此博文

Archiver|手机版|科学网 ( 京ICP备07017567号-12 )

GMT+8, 2024-5-21 05:46

Powered by ScienceNet.cn

Copyright © 2007- 中国科学报社

返回顶部