2012-08-24 14 views
12

मैं कुछ कोड है कि एक सीरियल रेडियो पर मान पढ़ता है और उन्हें पर्ल डाटा संरचनाओं में unpacks को बनाए रखने कर रहा हूँ:क्रमांकित रेगेक्स कैप्चर की अधिकतम संख्या क्या है?

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

यह बोझल कैप्चरिंग regex ने मुझे आश्चर्य: क्या पर्ल में गिने कब्जा चर पर ऊपरी सीमा है? क्या यह $MAXINT तक सभी तरह से जाता है?

+1

पर्ल, जहां भी व्यावहारिक, कोई कृत्रिम सीमा (एक डिजाइन लक्ष्य के रूप में) लगाता है। – DavidO

+4

रेगेक्स दूसरे 'अनपैक' – Borodin

उत्तर

16

यह स्क्रिप्ट कम से कम $N=5000000 तक काम करती है। उसके बाद, यह स्मृति से बाहर चला जाता है।

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

+1 का उपयोग करके सबसे अच्छा किया जाता है, दूसरे शब्दों में, सीमा पर्याप्त रूप से बड़ी है कि यदि आप कभी भी इसके करीब आ रहे हैं, तो आपको समस्या के प्रति अपने दृष्टिकोण पर पुनर्विचार करना होगा। –

संबंधित मुद्दे