क्या पर्ल में रेगेक्स को प्रीकंपाइल करने का कोई तरीका है? मेरे पास एक ऐसा प्रोग्राम है जिसे मैं प्रोग्राम में कई बार उपयोग करता हूं और यह उपयोगों के बीच नहीं बदलता है।क्या पर्ल में रेगेक्स को प्रीकंपाइल करने का कोई तरीका है?
उत्तर
शाब्दिक (स्थैतिक) regexes के लिए कुछ भी करने के लिए नहीं है - perl केवल उन्हें एक बार संकलित करेगा।
if ($var =~ /foo|bar/) {
# ...
}
चर में संग्रहीत रेगेक्स के लिए आपके पास कुछ विकल्प हैं। आप एक regex वस्तु का निर्माण करने के qr//
ऑपरेटर का उपयोग कर सकते हैं:
my $re = qr/foo|bar/;
if ($var =~ $re) {
# ...
}
यह आसान है आप कई स्थानों में एक regex का उपयोग करें या यह सबरूटीन्स को पारित करने के लिए चाहते हैं।
regex पैटर्न एक स्ट्रिंग में है, तो आप पर्ल है कि यह कभी नहीं बदल जाएगा वादा करना /o
विकल्प का उपयोग कर सकते हैं:,
my $pattern = 'foo|bar';
if ($var =~ /$pattern/o) {
# ...
}
यह आमतौर पर बेहतर है ऐसा नहीं है, हालांकि। पर्ल यह जानकर काफी समझदार है कि परिवर्तनीय नहीं बदला है और रेगेक्स को फिर से सम्मिलित करने की आवश्यकता नहीं है। /o
निर्दिष्ट करना शायद एक समयपूर्व माइक्रो-अनुकूलन है। यह भी एक संभावित नुकसान है। यदि परिवर्तनीय /o
का उपयोग कर बदल गया है तो वैसे भी पुराने regex का उपयोग करने के लिए perl का कारण बन जाएगा। इससे बग का निदान करना मुश्किल हो सकता है।
सरल: qr // ऑपरेटर की जांच करें (perlop में Regexp Quote-Like Operators के तहत दस्तावेज़ित)।
my $regex = qr/foo\d/;
$string =~ $regex;
अच्छा, ऐसा लगता है कि एस /// निर्माण में एक पैटर्न के रूप में उपयोग किया जा सकता है। क्या यह अभी भी पूर्व संकलित है या फिर इस मामले में इसे संकलित किया गया है? – akostadinov
@akostadinov यह अभी भी पूर्व संकलित है। –
- 1. क्या पर्ल में रेगेक्स बाध्यकारी ऑपरेटर `= ~` अधिभारित करने का कोई तरीका है?
- 2. क्या पर्ल नियमित अभिव्यक्ति का मिलान करने की संख्या का मूल्यांकन करने का कोई तरीका है?
- 3. पर्ल में, क्या स्टैस बांधने का कोई तरीका है?
- 4. पर्ल में दिनांक अंकगणित करने का अनुशंसित तरीका क्या है?
- 5. पर्ल रेगेक्स
- 6. रेगेक्स को जावा संगत रेगेक्स में बदलने का आसान तरीका?
- 7. क्या कोई ऐसा करने का कोई तरीका है जब पर्ल थ्रेड अपना काम पूरा करता है?
- 8. इस पर्ल रेगेक्स में `?` का क्या अर्थ है?
- 9. पर्ल रेगेक्स
- 10. क्या ऐसा करने का कोई तरीका है?
- 11. पर्ल रेगेक्स
- 12. पर्ल में वर्तमान में चल रहे प्रोग्राम को पुनरारंभ करने का कोई तरीका है?
- 13. क्या पर्ल के साथ विंडोज़ में व्यवस्थापक अधिकारों की जांच करने का कोई तरीका है?
- 14. क्या पर्ल रेगेक्स को/x के साथ लिखने का कोई बेहतर तरीका है ताकि कोड अभी भी पढ़ना आसान हो?
- 15. क्या पर्ल में ट्रेसिंग चालू करने का कोई तरीका है (bash -x के बराबर)?
- 16. क्या पीओडी की तुलना में पर्ल कोड दस्तावेज करने का कोई बेहतर तरीका नहीं है?
- 17. क्या पर्ल में यादृच्छिक फ़ाइल उत्पन्न करने का कोई और अधिक प्रभावी तरीका है?
- 18. क्या पर्ल में संदर्भ से पास करने का कोई बेहतर तरीका है?
- 19. क्या configManager.AppSettings को ओवरराइड करने का कोई तरीका है?
- 20. क्या gif फ़ाइलों को सिंक करने का कोई तरीका है?
- 21. क्या फॉर्म प्रतिक्रिया को अनदेखा करने का कोई तरीका है?
- 22. क्या SQLLataReader को मल्टीथ्रेड करने का कोई तरीका है?
- 23. क्या वाईएक्स बिल्ड को तेज करने का कोई तरीका है?
- 24. क्या एचएटीओएम माइक्रोफॉर्मेट को सत्यापित करने का कोई तरीका है?
- 25. क्या एक्सएमएल चेतावनियों को अक्षम करने का कोई तरीका है?
- 26. क्या StorageFile.CopyAsync() को रद्द करने का कोई तरीका है?
- 27. क्या गिसिस ग्रैफर को काम करने का कोई तरीका है?
- 28. क्या रननेबल को पैरामीटर पास करने का कोई तरीका है?
- 29. क्या मूसोम घटना को तेज करने का कोई तरीका है?
- 30. क्या ओपनिड को लागू करने का कोई आसान तरीका है?
ये सच हैं; हालांकि, qr // को कई सालों से समर्थित किया गया है (यह 5.005 के बाद से अस्तित्व में है, और मुझे लगता है कि 5.8 के बाद से इसमें कोई समस्या नहीं है) – ephemient
@ephemient Well, 5.10 में एक खराब स्मृति रिसाव qr // से जुड़ा हुआ है (और संकलन संकलन सामान्य रूप से), लेकिन यह तय किया गया है। यदि आप 5.10 का उपयोग कर रहे हैं, तो आप यह देखने के लिए जांच सकते हैं कि क्या आपके पास perl -e 'qr // जबकि 1' कहकर मेमोरी लीक है या नहीं। मुझे पता है कि ActiveState Perl 5.10 का ओएस एक्स संस्करण अभी भी टूटा हुआ है। –
2016 से नोट: '/ o' संशोधक को बहिष्कृत कर दिया गया है। विवरण के लिए [यह प्रश्न] देखें (http://stackoverflow.com/q/550258/477563)। –