От man perlre
: "?"perlre предел длины
Символ "*" квантификатором эквивалентно "{0}", на "+" квантификатором на "{1}", и квантификатор к "{0,1}". n и m ограничены интегральными значениями, меньшими заданного предела, определяемого при построении perl. Обычно это 32766 на наиболее распространенных платформах. Фактический предел может быть видно в сообщении об ошибке, генерируемого кода, как это:
$_ **= $_ ,/{$_}/for 2 .. 42;
Ay, что некрасиво - есть не какая-то константа я могу получить взамен?
Редактировать: Как указал Даксим (и perlretut намеков), возможно, 32767 является магическим жестко запрограммированным номером. в коде Perl Немного searching проходит долгий путь, но я не уверен, как получить к следующему шагу и на самом деле выяснить, где reg_infty или REG_INFTY по умолчанию фактически установлено:
~/dev/perl-5.12.2
$ grep -ri 'reg_infty.*=' *
regexec.c: if (max != REG_INFTY && ST.count == max)
t/re/pat.t: $::reg_infty = $Config {reg_infty} // 32767;
t/re/pat.t: $::reg_infty_m = $::reg_infty - 1;
t/re/pat.t: $::reg_infty_p = $::reg_infty + 1;
t/re/pat.t: $::reg_infty_m = $::reg_infty_m; # Surpress warning.
Edit 2: DVK конечно, правильно: это define
d во время компиляции, и, вероятно, можно переопределить только REG_INFTY
.
Также см http://perl.plover.com/yak/regex/samples/slide050.html – daxim
@daxim: я думаю, у вас есть полный ответ, а не только комментарий. «Даже если бы вы знали предел, это не было бы полезным номером, потому что двигатель регулярного выражения, скорее всего, умрет, прежде чем он достигнет теоретического предела». –