2010-06-22 3 views
16

एक SO answerdaxim राज्यों में:पर्ल में "~~" का क्या अर्थ है?

@array ~~ $scalar is true when $scalar is in @array 

जो करने के लिए draegtun उत्तर:

~~ महत्वपूर्ण है के आदेश 5.10.1+ से। इस प्रकार यह होने की जरूरत है $ अदिश ~~ @array

स्रोत (रों) निम्नलिखित विशिष्ट प्रश्न सहित के लिए लिंक (रों) के साथ ~~ पर एक छोटा सा प्राइमर के बारे में कैसे: ~~ क्या है? ~~ क्या कहा जाता है? आदेश एक संस्करण में क्यों मायने रखता है लेकिन पिछले एक में नहीं?

ध्यान दें कि एक अच्छा सारांश सभी विवरण प्राप्त नहीं कर सकता है और लिखना मुश्किल हो सकता है। इस पर्लिज्म के संपर्क को विस्तारित करते समय ~~ से अपरिचित किसी के लिए समय बचाने के लिए एक परिचय या प्राइमर बहुत उपयोगी होगा।

Search strings: non-word-tilde-tildenon-word-at-sign

+2

लोगों को यहां लगभग हर उत्तर में माइनस देने के साथ, मैं पोस्टिंग पर विचार करने के लिए भी डरता हूं! : पी – Jeriko

+3

यदि आपके पास आधिकारिक दस्तावेज पढ़ने के बाद पूछने के लिए एक विशिष्ट प्रश्न है, तो कृपया इसे पूछें। – Ether

+0

'~~' गुप्त इंचवार्म ऑपरेटर है जिसका उपयोग स्केलर संदर्भ को मजबूर करने के लिए किया जा सकता है: '~~ लोकलटाइम()' :-) –

उत्तर

23

विशेष रूप से उत्तर देना "क्यों करता है एक संस्करण में आदेश बात नहीं बल्कि पिछले एक में" देख 5.10.0 जिस तरह से इसे विश्वसनीय रूप से उपयोग करना मुश्किल हो गया, और दिए गए/जब इसे कम से कम उपयोगी बना दिया गया, तो अर्थशास्त्र 5.10.1 के साथ बदल दिया गया था और सभी भविष्य के संस्करणों का दावा होगा कि 5.10.0 संस्करण कभी नहीं अस्तित्व में।

स्मार्ट मैच के 5.10.1+ संस्करण में, बाएं ऑपरेंड और दाएं ऑपरेंड ~~ पर हमेशा स्पष्ट रूप से व्यवहार किया जाता है। जैसे =~ रेगेक्स मैच ऑपरेटर के साथ, बाईं तरफ मैच का "विषय" है, और दायीं तरफ से मिलान करने के लिए "पैटर्न" है - चाहे वह एक सादा स्केलर, रेगेक्स, एक सरणी या हैश संदर्भ हो , एक कोड संदर्भ, या जो भी हो। विशिष्टता perlsyn में बहुत अच्छी तरह से विस्तृत कर रहे हैं।

आपको 5.10.0 संस्करण के बारे में चिंता नहीं करना चाहिए जबतक कि आप पहले ही कोड लिख चुके हैं जो 5.10 पर निर्भर करता है।0 अर्थशास्त्र (इस मामले में, आपको 5.10.1 की आवश्यकता के लिए इसे फिर से लिखना चाहिए, अन्यथा यह perl के सभी भावी संस्करणों को तोड़ देगा)।

+3

+1। –

+0

@ माइकल कारमेन: चूंकि ~~ खोज में अच्छी तरह से काम नहीं करता है "~~ क्या कहा जाता है?" टीएफएम में इसे कैसे ढूंढें इसे संबोधित करते हैं। –

+2

@ सीडब्ल्यू। होलमन द्वितीय: क्या आप पूछेंगे कि '= ~' क्या है? '&&' के बारे में कैसे? आप उन लोगों के बारे में दावा करने के लिए भी "खोजना मुश्किल" बना सकते हैं। जब तक आप छद्म-ऑपरेटरों के बारे में नहीं पूछ रहे हैं जैसे '=() =' या '$ x -> 5' जैसे obfuscations उत्तर अभी भी वही है: perlop और perlsyn देखें। –

18

स्मार्ट मैच, देख perldoc perlsyn

टिप्पणी में एक अनुरोध के अनुसार, मैं एक छोटे से अधिक दे देंगे: स्मार्ट मैच कि कुछ भी नहीं जानते हुए भी अधिक एक समानता परीक्षण की समझ बनाने के लिए प्रयास करता है मनमाने ढंग से डेटा प्रकार के लिए एक ऑपरेटर है तर्कों के प्रकारों की तुलना में, कई परीक्षणों में जटिल संचालन जैसे पुनरावृत्ति और regex अनुप्रयोग

+1

जो बदले में है। ... क्या? – OscarRyz

+5

जो बदले में है ... उस लिंक के ठीक पीछे पूरी तरह से विस्तृत है। – hobbs

+2

मुझे लगता है कि सरल शब्दों में व्याख्या करना मुश्किल है। : -/ – OscarRyz

5

(जानें पर्ल से चोरी) की आवश्यकता होती है: बाइनरी "~~" अपने तर्कों के बीच एक स्मार्ट मैच करता है।

http://perldoc.perl.org/perlsyn.html#Smart-matching-in-detail

यह क्या करता है? "यह निर्भर करता है" ज्यादातर प्रदान किए गए तर्कों के प्रकार पर। उपरोक्त लिंक पेज में भिन्नताएं हैं जो भिन्नताएं हैं।

+0

स्पष्ट रूप से जवाब दे रहा है "~~ क्या है? ~~ कहा जाता है? ~~ के साथ लिंक के साथ ~~ पर एक छोटा प्राइमर कैसे होता है" एक डाउनवोट का हकदार है। अनुमोदित, मैंने जवाब नहीं दिया "आदेश एक संस्करण में क्यों मायने रखता है लेकिन पिछले एक में नहीं" लेकिन जिस पृष्ठ से मैंने लिंक किया है, वह स्पष्ट रूप से करता है। आरटीएफएम द्वारा कवर न किए गए प्रश्न के एकमात्र हिस्से का जवाब देने के लिए – JasonTrue

5

यह smartmatch operator है। स्मार्ट मैच ऑपरेटर बुरी तरह में डिजाइन किया गया था:

सामान्य तौर पर, जब आप पर्ल में ऑपरेटरों के बारे में जानकारी चाहते हैं, perldoc perlop