как печатать регулярные выражения в Perl - PullRequest
0 голосов
/ 03 декабря 2018

У меня есть такая строка:

Activity:B2012-0002            Type:BLDG            Sub Type:SFD_OTHE           Status:ISSUED

, и я хочу напечатать только:

Activity:B2012-0002

, для этого я использую следующий код:

my $text_file = "homework.txt";

open(INPUT, '<',$text_file) or die $!;
        while(my $row = <INPUT>){
            chomp($row);
            if($row =~ /Activity:[\w-]+/){
               print "$1\n";
            }
        }

но этот код возвращает следующую ошибку:

Use of uninitialized value $var in print at test.pl line 13, <INPUT> line 1.

мне нужна небольшая помощь, спасибо:)

1 Ответ

0 голосов
/ 03 декабря 2018

Вы должны добавить группы захвата к своему регулярному выражению.Например, скобки вокруг того, что вы хотите захватить.

        if($row =~ /Activity:([\w-]+)/){
           print "$1\n";
        }

Будет напечатано:

B2012-0002 

Кстати, если все, что вы делаете, это захват, вы можете не беспокоиться о назначении $row.Решите, сделает ли ваш код более понятным:

while ( <INPUT> ) {
  if ( m/Activity:([\w-]+)/){
    print "$1\n";
  }
}

Или, возможно, даже:

m/Activity:([\w-]+)/ && print $1,"\n";
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...