De man perlre
: "?"perlre límite de longitud
El "*" cuantificador es equivalente a "{0,}", el cuantificador "+" a "{1,}", y el cuantificador a "{0,1}". nym están limitados a valores integrales menores que un límite preestablecido definido cuando se construye perl. Esto es usualmente 32766 en las plataformas más comunes. El límite real se puede ver en el mensaje de error generado por el código como este:
$_ **= $_ ,/{$_}/for 2 .. 42;
Ay eso es feo - ¿No hay alguna constante que puedo conseguir en su lugar?
Editar: Como señaló daxim (y perlretut insinuaciones hacia) podría ser que 32767 es un número mágico codificado. Un poco searching en el código Perl va un largo camino, pero no estoy seguro de cómo llegar al siguiente paso y, de hecho localizar el origen del defecto o reg_infty REG_INFTY es en realidad establecen:
~/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.
Edición 2: DVK por supuesto, es correcto: es define
d en tiempo de compilación, y probablemente solo se puede sobrescribir con REG_INFTY
.
Véase también http://perl.plover.com/yak/regex/samples/slide050.html – daxim
@daxim: Creo tienes una respuesta completa allí, no solo un comentario. "Incluso si conociera el límite, no sería un número útil para saber porque el motor de expresiones regulares probablemente moriría antes de que alcanzara el límite teórico". –