Я немного новичок в соглашениях о кодировании Perl, может кто-нибудь помочь объяснить:
- почему перед переменными Perl стоят
/
и/<
? - что означает
\=
и=~
и в чем разница? - почему код требует окончания
/
перед;
, например./start=\'([0-9]+)\'/
?
Первые три подвопроса были вроде как решены 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 /
— это проверка регулярного выражения, которая проверяет, содержит ли строка чтения вwhile (<$uamin>)
следующую строку:<segment
.- Точно так же
/start=\'([0-9]+)\'/
не имеет ничего общего с созданием экземпляра какой-либо переменной, это проверка регулярного выражения, чтобы увидеть, содержит ли строка чтения вwhile (<$uamin>)
start=\'([0-9]+)\'
, где\'([0-9]+)\'
относится к числовой строке. - В
$features =~ s/annotation;//
используется=~
, потому что замена строки проверяла соответствие регулярному выражению. См. Что делает =~ в Perl?