मान लें कि मेरे पास पैकेज MyPackage
है जो @EXPORT
का उपयोग करता है।
#this is MyPackage.pm
package MyPackage;
@EXPORT = qw(do_awesome_thing);
sub do_awesome_thing { ... }
sub be_awesome { ... }
अब, जब मैं अपने कोड में MyPackage
उपयोग करते हैं,
#this is myscript.pl
use MyPackage;
do_awesome_thing(); #works
be_awesome(); #doesn't work
MyPackage::be_awesome(); #works
do_awesome_thing
स्वचालित रूप से मुझे कहने के लिए "यह मेरे लिए दे" बिना MyPackage
से मेरे कोड को निर्यात किया जाता है,। be_awesome
निर्यात नहीं किया गया है (और इसे @EXPORT_OK
के साथ निर्यात नहीं किया जाएगा, मैं बस उस हिस्से को दिखा रहा हूं कि आपको "निर्यात" हमें क्या देता है)।
दूसरी ओर, अगर मैं एक पैकेज MyOtherPackage
@EXPORT_OK
का उपयोग करता है,
#this is MyOtherPackage.pm
package MyOtherPackage;
@EXPORT_OK = qw(do_awesome_thing);
sub do_awesome_thing { ... }
sub be_awesome { ... }
और फिर
#this is mynewscript.pl
use MyOtherPackage;
do_awesome_thing(); #doesn't work
MyOtherPackage::do_awesome_thing(); #works, as always
लाइन do_awesome_thing
को सीधे फ़ोन काम नहीं करेगा प्रयास करें। ऐसा इसलिए है क्योंकि @EXPORT_OK
में कुछ डालने का कहना है, "यह केवल मेरे उपयोगकर्ताओं को दें यदि वे इसके लिए पूछें"। चूंकि हमने यहां आयात किए जाने के लिए do_awesome_thing
स्पष्ट रूप से पूछे बिना use MyOtherPackage
कहा है, यह आयात नहीं किया जाता है, और केवल पैकेज नाम निर्दिष्ट करके ही पहुंच योग्य है।
आयात करने के लिए do_awesome_thing
के लिए जिस तरह से आप use MyOtherPackage qw(do_awesome_thing)
mynewscript.pl
की दूसरी पंक्ति में कहें। यह कहता है कि मॉड्यूल आयात करें और do_awesome_thing
सीधे उपलब्ध कराएं। उसके बाद, mynewscript.pl
में चौथी पंक्ति काम करना शुरू कर देगी।
ध्यान दें कि उपयोगकर्ता पहले पैकेज के साथ use MyPackage qw(do_awesome_thing)
निर्दिष्ट कर सकता है, और उस स्थिति में, @EXPORT
सूची में और कुछ भी निर्यात नहीं किया जाएगा, केवल do_awesome_thing
होगा। इसलिए, use PackageName;
के डिफ़ॉल्ट मामले को छोड़कर, @EXPORT
और @EXPORT_OK
समान व्यवहार करें। डिफ़ॉल्ट स्थिति में, @EXPORT
में कुछ भी उपयोगकर्ता की स्क्रिप्ट में स्वचालित रूप से फेंक दिया जाता है, जबकि @EXPORT_OK
अधिक विनम्र है और कुछ भी निर्यात नहीं करता है।
यदि आपको कोई भी डिफ़ॉल्ट रूप से कई प्रतीकों को निर्यात नहीं करना चाहिए। @EXPORT आमतौर पर छोटा या खाली होगा। @EXPORT_OK और भी शामिल हो सकता है। उदाहरण के लिए, एनकोड निर्यात 'एनकोड' और 'डीकोड' डिफ़ॉल्ट रूप से (' @ निर्यात'), लेकिन 'is_utf8' (' @ EXPORT_OK') नहीं – ikegami