[Moscow.pm] Perl 5.10 known bug with (?| ... ) and named captures

Andrew Shitov andy на shitov.ru
Сб Ноя 24 05:04:00 PST 2007


> Вот не факт, что этот можно легко исправить, как я понял, именованные
> матчи, это всего лишь хэш по нумерованным, и соответственно (?| 
> отрабатывает абсолютно правильно, просто именованные матчи на это не 
> расчитаны, и их надо в этом случае либо хитро перещитывать, либо 
> переписать заново, без завязки на номер позиции.

Почти слово в слово так же говорит Ив Ортон (разработчик regexen) :-)


I concur, and actually off the top of my head I can't see an easy solution.

Named captures are implemented as maps to one or more numbered capture
buffers. And capture buffers in general work by hardmapping an
open/close regop to a given buffer number, normally a 1:1 mapping,
except that branch reset bends the rule so that multiple regops point
at the same buffer. Thus the two are to a certain extent mutually
exclusive.

   ...

IMO its most definately not something that can be changed in time for release.




Кстати, мы совсем забыли посмотреть на содержимое %-.

'November, 2007' =~ /
        (?|
            (?<year>\d{4})  (\d\d)  (\d\d)
        |
            (\w+),  \s*  (?<year>\d{4})
        )
    /x;
say for @{$-{year}};  # напечатает и November, и 2007.




--
Андрей Шитов
______________________________________________________________________
andy на shitov.ru | http://www.shitov.ru



Подробная информация о списке рассылки Moscow-pm