这些perl变量意味着什么



我对perl编码惯例有点陌生,有人能帮我解释一下吗:

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

前3个子问题实际上是由perldocs解决的,但下一行在代码中意味着什么

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

我知道我们正在将$特性推送到@Start数组中,但@$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); 
    }
}

已编辑

因此,在深入阅读了perl-doc之后,以下是我得到的

  • /<segment /是一个正则表达式检查,用于检查readline在CCD_ 12中包含以下字符串:CCD_
  • 类似地,/start='([0-9]+)'/与实例化任何变量,这是一个regex检查,以查看while (<$uamin>)中的读线包含start='([0-9]+)''([0-9]+)'是指一个数字字符串
  • $features =~ s/annotation;//中,使用=~是因为字符串替换正在测试正则表达式匹配。看见=~在Perl中做什么

你在哪里看到这种语法的?/foo/使用正则表达式而不是变量来表示匹配运算符。换句话说,第一行是检查输入字符串$_是否包含字符序列<segment

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

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

运行命令perldocperlreput以了解Perl中的regex。

最新更新