कि गुंजाइश के साथ क्या करना है नहीं है, लेकिन के साथ समय और रन टाइम संकलन। यहां एक सरल स्पष्टीकरण दिया गया है।
पर्ल दुभाषिया प्रारंभ में आपके कोड को स्कैन करेगा, और use
कथन या BEGIN
ब्लॉक का पालन करेगा। उस समय, यह सभी sub
एस देखता है, और उन्हें अपने संबंधित पैकेज में नीचे नोट करता है। तो अब आपके पास अपनी प्रतीक तालिका में &::myf
है।
जब संकलन समय प्रोग्राम के अंत तक पहुंच गया है, तो यह रन टाइम में स्विच हो जाएगा।
उस बिंदु पर, यह वास्तव में कोड चलाता है। &myf
परिभाषित होने पर आपका पहला print
कथन निष्पादित किया गया है। हम जानते हैं कि यह है, क्योंकि यह संकलन समय पर सेट हो गया है। पर्ल फिर उस समारोह को बुलाता है। सब ठीक हैं। अब आप undef
प्रतीक तालिका में प्रवेश करते हैं। यह रन टाइम पर भी होता है।
उसके बाद, defined &myf
झूठा लौटाता है, इसलिए यह प्रिंट नहीं करता है।
आपके पास कोड में myf()
पर दूसरी कॉल भी है, लेकिन टिप्पणी की गई। यदि आप टिप्पणी हटाते हैं, तो यह शिकायत करेगा, अनिर्धारित सबराउटिन & मुख्य :: myf कहा जाता है। यह हुआ कि यह क्या हुआ एक अच्छा संकेत है।
तो वास्तव में यह कोड में आगे या पीछे नहीं दिखता है। यह उस समय कोड स्कैनिंग समाप्त हो चुका है।
विभिन्न चरणों को in perlmod समझाया गया है।
ध्यान दें कि वास्तव में undef
फ़ंक्शन में बहुत से उपयोग के मामले नहीं हैं। मैं नहीं देखता कि आप इसे क्यों हटा देंगे, जब तक कि आप अपना नेमस्पेस मैन्युअल रूप से साफ़ नहीं करना चाहते थे।
क्योंकि 'undef' रनटाइम पर चलाने के लिए कोड है, लेकिन 'sub' एक परिभाषा है और संकलन समय पर होती है। – Sobrique