Что такое $ 1 в Perl? - PullRequest
       11

Что такое $ 1 в Perl?

3 голосов
/ 29 апреля 2010

Что такое $1? Это совпадение найдено для (\d+)?

$line =~ /^(\d+)\s/; 
next if(!defined($1) ) ;
$paperAnnot{$1} = $line;

Ответы [ 3 ]

4 голосов
/ 29 апреля 2010

вы правы, $1 означает первую группу захвата, в вашем примере это (\d+)

3 голосов
/ 29 апреля 2010

Да! Это групповой матч. Видя 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 .

2 голосов
/ 29 апреля 2010

Да, все, что записано в скобках, присваивается магическим переменным $ 1, $ 2, $ 3 ... и т. Д. Если регулярное выражение не совпадает, оно будет неопределенным.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...