Приветствую вас, великие perl-гуру ж) Никак не могу понять, как используя один рег выгребать из INI файла нужные строчки.. Пример файла:
... [section0] key0=value0 key1=value1 key2=value2 [section1] ...
Нужно получать все что между секциями [section0] и [section1]. делаю так:
while (my $line = <FILE>) { if ($line =~ m/\[section0\]\s+(\w+=\w+\s+){12}\[section1\]{/mg) { print $&, "\n"; } }
т.е. я знаю что между секциями 12 пар ключ=значение, в каждой новой строчке. Но увы не работает такое дело. Как я понял, если я испльзую “/m” то в реге “\s+” можно не писать ? В общем помагите пожалуйста найти ошибку.

Нужно не так:)
Нужно не так:) Два пути: взять готовое решение(Config::INI::Simple, Config::Any::INI) и использовать их. Вариант номер два - посмотреть, как реализовано у товарищей. Хотя лично я бы стал использовать модуль.
Тут все
Тут все делается намного проще:
...
Ошибка в том, что в рег. выраж. не было
разделителей полей - \n
т.е. [ ([класс-строка]) [\n] ] [квантификатор повтора]
а далее читаем $1 .. $n в которых искомые ключи-знач.
или ([класс-строка][\n]) [квантификатор повтора]
но с \n в конце строки.
Начальные и конечные эл. рег. выражения я опустил для кратости.
2 cybertom, \s+ , разве
2 cybertom, \s+ , разве не заменяет \n ?
m/\[section0\]\s+(\w+=\w+\s+){12}\[section1\]{/mg+ в конце /m - это какбэ miltiline.. C ним и без него не работает.
...
попробуй это: (выделяет все ключи из секции)
\[section0\]\W([\w]+=[\w]+\W)+
$a =~ m/(([\w]+=[\w]+\W)+)/i;
$a =~ m/\[section0\]\W(([\w]+=[\w]+\W)+)/i;
Всем спасибо!
Всем спасибо! Сделал так:
...
Усё!