我对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。