Regexp для обработки INI файла

Приветствую вас, великие 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) и использовать их. Вариант номер два - посмотреть, как реализовано у товарищей. Хотя лично я бы стал использовать модуль.

Тут все

Тут все делается намного проще:

my ($mysec, $payrs) = (0,'');
while (my $line = )
{
    if ($mysec == 1)
    {
       if ($line =~ m/\[section/)) { $mysec = 0; next }
       $payrs .= $line;
    }
    if ($line =~ m/\[section0\]/)              { $mysec = 1; next }
}
print "".$payrs."\n";

...

Ошибка в том, что в рег. выраж. не было
разделителей полей - \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;

Всем спасибо!

Всем спасибо! Сделал так:

  open (VERSION, "./base/update.ver") 
        or die ("Error. Can't open update.ver\n");
    my @line = <VERSION>;
 
    my ($line_1, $line_2);
    for (my $i = 0; $i < scalar(@line); $i++)
    {
        if ($line[$i] =~ m/\[ENGINE2\]/)
        {
            $line_1 = $i + 1;
            next;
        }
        if ($line[$i] =~ m/\[LOADER0\]/)
        {
            $line_2 = $i;
            last;
        }
    }

#!/usr/bin/perl 
print("подпись!!1\n");

...

open (SRC, '<cfg.txt');   
join("", <SRC>) =~ //;
while ($' =~ /(\[[\w]+\])|([\w]+=[\w]+)/)
{
  #print "$& ($1) ($2)\n";
  print "-----$&\n" if (($1));   # добавляем секцию
  print "..$&\n" if (($2));      # добавляем ключ в секцию
}
close (SRC);

Усё!