LINUX.ORG.RU

Perl: паспарсить регекспом более 32766 байт


0

0

Есть что-то вроде $var=~/("(.+?)"|..другой суб-паттерн..)/;

Два дня ловлю непонятный баг: на юнит-тестах регексп работает отлично, а на реальной задаче выводит вообще что-то непонятное. Воткнул где только можно отладку в виде сообщений (?{print "еще жив!"}) и начал разбирать - нужный паттерн умирает после 32767 интераций и начинает работу другой суб-паттерн, откуда и шли непонятные глюки.

Можно ли как-то обойти лимит без перекомпиляции? В мане нашел n and m are limited to integral values less than a preset limit defined when perl is built. This is usually 32766 on the most common platforms.

Или в морг и все переписывать?

> defined when perl is built.

пересобрать перл?

anonymous
()

может быть поменять алгоритм, не делать все одним огромным регекспом, а разбить на куски сплитом например?

OxiD ★★★★
()

Однозначно - менять логику самой программы.
А то некоторые умудряются упереться в лимит по памяти при попытке распечатать таблицу умножения 10Х10.

ovax ★★★
()

хз, я нормально парсил хтмлки по нескольку десятков мегабайт.. на дебиане, i386. может у тебя перл кривой ?

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

> распечатать таблицу умножения 10Х10.

пруфкод?

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