LINUX.ORG.RU

Не вижу ошибки, не заполняются переменные совпадения в Perl.

 ,


1

1

Парни, выручайте, уже ум за разум заходит, что не так делаю? (perl 5.14)

Есть текстовый файл в котором где то есть строка:

    Set table = cat.Tables("Банк")
Файл этот подается на вход перл-скрипту, в двух словах, скрипт дойдя до этой строки показывает ее и показывает содержимое переменных совпадения ($1 и $2). Я ожидал что содержимое переменных совпадения будет в наличии и я увижу его, но нет же, после того как перл находит строку он говорит что я использую неинициализированные переменные.

Скажем код такой:

use strict;
use 5.010;
#До тех пор как $_ станет undef или же не undef но совпадет с рег. шаблоном
until( !defined($_ = <>) or m/^(\h*?)Set table = cat\.Tables\("(.+?)"\)$/ ) {
}
exit unless $_;
print STDERR 'The whole line: ', $_;
say STDERR '$1: ', $1;
say STDERR '$2: ', $2;

$1 и $2 из условия действительны только внутри блока until.

anonymous ()

Зачем тебе этот антил? Пиши

defined($_ = <>) and m/^(\h*?)Set table = cat\.Tables\("(.+?)"\)$/;
DELIRIUM ☆☆☆☆☆ ()

$1 и $2 из условия действительны только внутри блока until.

anonymous ()
Ответ на: комментарий от anonymous

Баа, вот так неприятность. Что же, теперь придется код грамоздким и некоасивым делать.

Спасибо тебе, тайный друг.

normann ★★ ()
Ответ на: комментарий от DELIRIUM

Нет, получается другле условие, с обратным смылом.

normann ★★ ()

Вместо

say STDERR '$1: ', $1;
можно
warn "\$1: $1\n"

disarmer ★★★ ()

Прочитай Damien Conway Perl Best Practice.

Глава Regular Expressions, String Boundaries, Named Characters.

Nurmukh ★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.