perl - उपर्युक्त में प्रयोग विवरण क्यों वैश्विक रूप से लागू होते हैं?




module scope (2)

यह क्या है perldoc राज्यों:

क्योंकि समय का संकलन करने पर use का प्रभाव होता है, यह संकलित कोड के सामान्य प्रवाह नियंत्रण का सम्मान नहीं करता है। विशेष रूप से, एक सशर्त की झूठी शाखा के अंदर एक प्रयोग डालने से उसे संसाधित नहीं किया जा सकता है

दुर्भाग्य से यह एक स्पष्टीकरण नहीं देता है कि ऐसा क्यों बनाया गया है संभावित कारण हो सकते हैं:

  • पर्ल आपको बहुत से मामलों में स्वतंत्रता देता है (टिमोवाटीडीआई)
  • उपस्ट्रैटेनी के अंदर का use करना आपके इरादे को दिखा सकता है कि आप वास्तव में किसी विशिष्ट स्थान पर केवल एक मॉड्यूल का उपयोग करना चाहते हैं (यहां तक ​​कि जब यह विश्व स्तर पर लोड हो जाता है)
  • अगर आप (पुनः) किसी विशेष उप-विधि (जो use में शामिल होता है) को ले जाते हैं, तो आपको अपने स्क्रिप्ट के शीर्ष पर अन्य स्थानों से अप्रयुक्त use को हटाने के बारे में चिंता करने की ज़रूरत नहीं है
  • ...

यद्यपि इन विचारों को अनुकूलनीय लगता है, मैं उपमहाद्वीप में मॉड्यूल लोड करने से बचना चाहूंगा क्योंकि यह सभी जगहों पर बिखरे हुए स्थान के बजाय एक स्थान पर सभी को स्पष्ट करना है?

use WWW::Mechanize;
$mech = new WWW::Mechanize;
$mech->get("http://www.google.com");
$html = HTML::TreeBuilder::XPath->new_from_content($mech->content);
sub test
{
    use HTML::TreeBuilder::XPath;
}

उपरोक्त कोड संकलित करता है, इसलिए sub में use बयान विश्व स्तर पर लागू किया जा रहा है।

perl ऐसा क्यों करता है? यह कोई मतलब नहीं है।


use Module; दो प्रभाव हैं

पहला मॉड्यूल लोड करना है जाहिर है, इसका वैश्विक प्रभाव है यदि एक से अधिक मॉड्यूल इसका उपयोग करता है तो कोई भी एक मॉड्यूल कई बार लोड नहीं करना चाहता है

दूसरा मॉड्यूल की import विधि को कॉल करना है। अधिकांश मॉड्यूल के लिए, यह कॉलर के नाम स्थान पर प्रतीकों को निर्यात करने में सहायता करता है, इसलिए इन कार्यों को उन्हें पूर्ण पैकेज नाम के साथ योग्यता के बिना कहा जा सकता है। यह स्पष्ट रूप से केवल कुछ उप-भागों से अधिक प्रभावित करता है क्योंकि कोई भी उप-उप अपनी खुद की नामस्थान नहीं देता है लेकिन वास्तव में आप पर निर्भर है

कुछ मॉड्यूल import विधि, हालांकि, कुछ बहुत अलग करते हैं। वे उस बदलाव को बदलते हैं, जिसमें लिखे गए दायरे में कोड को संकलित किया जाता है जिसमें निर्देश मौजूद है। ये प्रगामा कहलाते हैं। use strict; एक का एक उदाहरण है यह एक उप में इन मॉड्यूल का उपयोग करने के लिए समझ में आता है use HTML::TreeBuilder::XPath; का use HTML::TreeBuilder::XPath; करना use HTML::TreeBuilder::XPath; एक उप में, हालांकि, कोई मतलब नहीं है।





use