[Moscow.pm] Perl 5.10 known bug with (?| ... ) and named captures
Andrew Shitov
andy на shitov.ru
Сб Ноя 24 02:16:11 PST 2007
Для тех, кто не был на первой встречи, сообщу, что мы совместно :-)
нашли баг в одной из новых возможностей регулярных выражений Perl
5.10.
Суть: если использовать две одинаково именованные переменные внутри
двух веток "|", заключенных в блок (?| ... ), то вторая именованная
переменная будет хранить "не те скобки", а именно скобки, номер
которых во втором подвыражении совпадает с номером скобок в первом
подвыражении, в которых именованная переменная встречается в первый
раз.
Пример:
my $re = qr/
(?|
(?<year>\d{4}) (\d\d) (\d\d)
|
(\w+), \s* (?<year>\d{4})
)
/x;
'20071122' =~ $re;
say $+{year}; # Печатает '2007', верно.
'November, 2007' =~ $re;
say $+{year}; # Печатает 'November', ошибка.
Ответ разработчиков:
От: Rafael Garcia-Suarez via RT <perlbug-followup на perl.org>
К: andy на shitov.ru
Время создания: Sat, 24 Nov 2007 02:02:16 -0800
Тема: [perl #47762] 5.10: different behaviour of duplicated
named capturing parens with/without (?|...)
This doesn't look very difficult to fix, but for 5.10.0, since we're
in RC mode, it's probably better to document this as a known limitation.
(Это, похоже, несложно исправить, но в 5.10.0, поскольку эта
версия - релиз кандидат, вероятно лучше задокументировать это как
известное ограничение.)
--
Андрей Шитов
______________________________________________________________________
andy на shitov.ru | http://www.shitov.ru
Подробная информация о списке рассылки Moscow-pm