Что такое $1
? Разве что матч найден для (\d+)
?
$line =~ /^(\d+)\s/;
next if(!defined($1)) ;
$paperAnnot{$1} = $line;
Что такое $1
? Разве что матч найден для (\d+)
?
$line =~ /^(\d+)\s/;
next if(!defined($1)) ;
$paperAnnot{$1} = $line;
вы правы, $1
означает первый захват группу, в вашем примере, который (\d+)
Да, все, что захваченное в скобках относятся к $ 1, $ 2, $ 3 ... и т.д. магическим переменным. Если регулярное выражение не совпадает, они не будут определены.
Да! Это групповой матч. Увидев next
, он, вероятно, находится в цикле. Тем не менее, лучший способ обработки, что вы должны были бы использовать условное и проверить регулярное выражение:
if ($line =~ /^(\d+)\s/) {
$paperAnnot{$1} = $line;
}
или даже лучше, дать $ 1 имя, чтобы сделать его документирован:
if ($line =~ /^(\d+)\s/) {
my $index = $1;
$paperAnnot{$index} = $line;
}
Кроме того, вы можете найти более подробную информацию о $1
и ее братьях в perldoc perlvar.
И теперь в Perl 5.10 и новее, вы можете использовать именованный захват группы:
use 5.010; # or newer
...
if ($line =~ /^(?<linenum>\d+)\s/) {
$paperAnnot{ $+{linenum} } = $line;
}
Подробнее об именованных группах Захвата с perldoc perlre.
Потому что здесь не упоминается в другом месте, пожалуйста, посетите страницу perldoc perlre для получения дополнительной информации. – kbenson
В 'perldoc perlvar' есть еще более интересная информация. // Не заметил, что это уже было сделано. – ZyX