2012-08-24 10 views
12

ich einige Codes beibehalten wird, die Werte über eine serielle Radio liest und entpackt sie in Perl-Datenstrukturen:Was ist die maximale Anzahl von nummerierten Regex-Captures?

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

Dieses unhandlich Capturing regex machte mich fragen: Was ist die obere Schranke für nummerierte Capture-Variablen in Perl? Geht es den ganzen Weg bis zu $MAXINT?

+1

Perl, wo immer praktisch, legt keine künstlichen Grenzen (als Designziel). – DavidO

+4

Die Regex ist am besten mit einem anderen "Entpacken" – Borodin

Antwort

16

Dieses Skript funktioniert bis mindestens $N=5000000. Danach hat es nicht mehr genug Speicher.

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

+1, mit anderen Worten, die Grenze ist ausreichend groß, dass, wenn Sie jemals in der Nähe, müssen Sie Ihre Herangehensweise an das Problem zu überdenken. –

Verwandte Themen