2012-07-21 123 views
-3

我有点noobish到perl编码规范,能不能有人帮忙解释一下:这些Perl变量是什么意思?

  • 为什么在Perl的变量的前//<
  • \==~是什么意思,有什么区别?
  • 为什么代码在;之前需要结束/,例如, /start=\'([0-9]+)\'/

前3个子问题是由perldocs解决的,但下面的代码是什么意思?

push(@{$Start{$start}},$features);

据我所知,我们正在推进的$功能集成到一个数组@启动,但什么@$Start{$start}是什么意思?它是一样的: @Start = ($start);

中的代码有这样的事情:

use FileHandle; 

sub open_infile { 
    my $file = shift; 
    my $in = FileHandle->new($file,"<:encoding(UTF-8)") 
     or die "ERROR: cannot open $file: $!\n" if ($Opt_utf8); 
    $in = new FileHandle("$file") 
     or die "ERROR: cannot open $file: $!\n" if (!$Opt_utf8); 
    return $in; 
} 

$uamf = shift @ARGV; 
$uamin = open_infile($uamf); 


while (<$uamin>) { 
    chomp; 
    if(/<segment /){ 
     /start=\'([0-9]+)\'/; 
     /end=\'([0-9]+)\'/; 
     /features=\'([^\']+)\'/; 
     $features =~ s/annotation;//; 

    push(@{$Start{$start}},$features); 
    push(@{$End{$end}},$features); 
    } 
} 

EDITED

所以后perl的文档的一些精读,这里的有些事情我” ve gotten

  • /<segment /是一个正则表达式che cks while (<$uamin>)的readline 是否包含以下字符串:<segment
  • 同样的/start=\'([0-9]+)\'/无关做 实例的任何变量,这是一个正则表达式检查,以查看该 的readline在while (<$uamin>)是否包含start=\'([0-9]+)\'\'([0-9]+)\'指的是数字字符串。
  • $features =~ s/annotation;//=~被使用,因为字符串 替换是测试正则表达式匹配。见 What does =~ do in Perl?

回答

2

你在哪里看到这个语法(或更重要的是:有你编辑的东西出来,你看到了什么)? /foo/表示使用正则表达式的匹配运算符,而不是变量。换句话说,第一行是检查输入字符串$_是否包含字符序列<segment

接下来的三行基本上没有任何用处,因为它们运行正则表达式匹配,然后放弃结果(有副作用,但随后的正则表达式也放弃副作用)。

最后一行进行替换,用字符串$features中的空字符串替换字符annotation;的第一个出现。

运行命令perldoc perlretut以了解Perl中的正则表达式。

+0

我还没有编辑代码。你是否认为第一行检查inputtrng $ _是否包含字符“ segment”? – alvas 2012-07-21 22:18:15

+0

@ 2er0:错字,对不起 – 2012-07-22 00:38:16