对于perl编码惯例,我有点不感兴趣,有人可以帮忙解释一下:
/
和/<
? \=
和=~
是什么意思,有什么区别? /
之前需要结尾;
,例如/start=\'([0-9]+)\'/
?前3个子问题实际上是由perldoc解决的,但是代码中的以下行是什么意思?
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);
}
}
EDITED
所以在对perl doc进行了一些深入阅读之后,这里有一些我已经得到的东西
/<segment /
是一个正则表达式检查,用于检查是否为readline
while (<$uamin>)
中包含以下字符串:<segment
。/start=\'([0-9]+)\'/
与此无关
实例化任何变量,它是一个正则表达式检查,看看是否
while (<$uamin>)
中的readline包含start=\'([0-9]+)\'
\'([0-9]+)\'
指的是数字字符串。 $features =~ s/annotation;//
中使用=~
因为字符串
替换正在测试正则表达式匹配。看到
What does =~ do in Perl? 答案 0 :(得分:2)
你在哪里看到这种语法(或者更重要的是:你是否根据所看到的内容编辑了东西)? /foo/
表示使用正则表达式而不是变量的匹配运算符。换句话说,第一行是检查输入字符串$_
是否包含字符序列<segment
。
后续的三行基本上没有任何用处,因为它们运行正则表达式匹配然后丢弃结果(有副作用,但后续正则表达式也会丢弃副作用)。
最后一行执行替换,将字符annotation;
的第一次出现替换为字符串$features
中的空字符串。
运行命令perldoc perlretut以了解Perl中的正则表达式。