我对 perl 编码约定有点讨厌,有人可以帮忙解释一下:
- 为什么perl变量前面 有
/
and ?/<
- 是什么意思
\=
,=~
有什么区别? - 为什么代码需要在例如
/
之前结束?;
/start=\'([0-9]+)\'/
第 3 个子问题实际上是由 perldocs 解决的,但是以下行在代码中意味着什么?
push(@{$Start{$start}},$features);
我知道我们正在将 $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 文档进行了深入阅读之后,这是我得到的一些东西
- 这
/<segment /
是一个正则表达式检查,检查 readline in 是否while (<$uamin>)
包含以下字符串:<segment
. - 同样
/start=\'([0-9]+)\'/
,这与实例化任何变量无关,它是一个正则表达式检查,以查看 readline 中是否while (<$uamin>)
包含start=\'([0-9]+)\'
引用\'([0-9]+)\'
数字字符串。 - 在is
$features =~ s/annotation;//
中=~
使用是因为字符串替换正在测试正则表达式匹配。请参阅 =~ 在 Perl 中做了什么?