कभी-कभी मुझे एक उपयोगी प्रोग्रामिंग फ़ंक्शन की आवश्यकता होती है, जैसे List::Util::max
एक बड़े प्रोग्राम के बीच में जो बहुत सारी चीज़ें करता है। तो अगर मैंबड़े पैमाने पर उपयोगी कार्यों को बड़े पैमाने पर आयात करना
use List::Util 'max';
करना मेरा कार्यक्रम के शीर्ष पर, मुझे लगता है कि प्रतीक के साथ अटक कर रहा हूँ, मेरी पूरी नेमस्पेस को दूषित है, भले ही मैं केवल एक सबरूटीन में इसकी आवश्यकता है।
तो मैं एक अलग तरीके की कोशिश कर के बारे में सोच किया गया है, बजाय:
use List::Util();
# a whole bunch of stuff later...
sub blah {
List::Util->import('max');
$blah = max @foobar;
...
}
इस के साथ दो समस्याओं, हालांकि कर रहे हैं। एक के लिए, यह ब्लॉक (ड्रैट।) के अंत में स्वचालित रूप से अनमोर्ट नहीं होता है, मुझे unimport
के साथ सबकुछ पूर्ववत करना होगा।
दूसरी समस्या यह है कि स्पष्ट रूप से प्रोटोटाइप सही ढंग से लागू नहीं होते हैं, इसलिए मुझे सुंदर पेरेंटलेसलेस संस्करण के बजाय max(@foobar)
कहना है।
क्या एक ब्लॉक के लिए अस्थायी रूप से प्रतीकों को आयात करने का कोई आसान तरीका है, जो स्वचालित रूप से ब्लॉक के अंत में उन्हें दूर कर देगा, और भी प्रोटोटाइप को सही ढंग से संभाल लेंगे?
यह सूक्ष्म त्रुटियों को पेश करेगा यदि 'अधिकतम' का प्रोटोटाइप है, क्योंकि इसका प्रभाव संकलन समय पर जला दिया जाता है। 'Max2' में,' मुख्य :: अधिकतम' से प्रोटोटाइप का उपयोग किया जाता है, न कि 'सूची :: Util :: max' से। मददगार रूप से, आपको असाइनमेंट पर प्रोटोटाइप विसंगति के बारे में चेतावनी मिलनी चाहिए। –
@ एरिक स्ट्रॉम - अच्छा बिंदु, वह चूसना होगा। सावधानी के साथ 'स्थानीय' सबराउटिन नाम का प्रयोग करें। – mob