2012-08-24 11 views
12

estoy manteniendo un código que lee los valores a través de una serie de radio y los descomprime en las estructuras de datos de Perl:¿Cuál es el número máximo de capturas de expresiones regulares numeradas?

# Don't yell at me, I didn't write this 
if ($command_string =~ 
    /^.(.)(.).(..)(.)(..)(.)(....)(....)(....)(....) 
     (..)(..)(.)(.)(.)(.)(..)(..)(..)(..)(..)(..)(.)(.)....... 
      (.)........(.)(.).*/sx) { 

    $config->{sequence}  = hex(unpack('H2', $1)); 
    $config->{radio_id}  = hex(unpack('H2', $2)); 
    ... 
    $config->{radio_type} = hex(unpack('H2', $26)); 
    $config->{radio_channel} = hex(unpack('H2', $27)); 
} 

Esta difícil de manejar expresiones regulares captura me hizo extrañar: ¿Cuál es el límite superior de las variables de captura numerados en Perl? ¿Va todo el camino hasta $MAXINT?

+1

Perl, siempre que sea práctico, no impone límites artificiales (como objetivo de diseño). – DavidO

+4

La expresión regular se realiza mejor usando otro 'desempaquetar' – Borodin

Respuesta

16

Este script funciona hasta al menos $N=5000000. Después de eso, se queda sin memoria.

$N = $ARGV[0] || 5000; 
$q = '(.)' x $N; 
$regex = qr/$q/; 
("x" x $N) =~ $regex; 
print eval "\$$N"; 
+5

+1, en otras palabras, el límite es lo suficientemente grande como para que, si alguna vez se está acercando a él, tenga que reconsiderar su enfoque del problema. –

Cuestiones relacionadas