2012-08-24 8 views
12

sto mantenendo un po 'di codice che legge i valori su una radio di serie e li decomprime in strutture dati Perl:Qual è il numero massimo di catture di espressioni regolari numerate?

# 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)); 
} 

Questo ingombrante cattura regex mi ha fatto pensare: qual è il limite superiore sulle variabili di cattura numerati in Perl? Va fino a $MAXINT?

+1

Perl, ovunque sia pratico, non impone limiti artificiali (come obiettivo di progettazione). – DavidO

+4

L'espressione regolare viene eseguita utilizzando un altro 'unpack' – Borodin

risposta

16

Questo script funziona almeno fino a $N=5000000. Dopo di ciò, esaurisce la memoria.

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

+1, in altre parole, il limite è sufficientemente ampio che, se ci si avvicina, è necessario riconsiderare l'approccio al problema. –

Problemi correlati