2009-07-21 8 views
27

use My::Module और require My::Module करने के बीच क्या अंतर है?पर्ल में, मॉड्यूल लोड करने के लिए उपयोग और आवश्यकता के बीच क्या अंतर है?

+2

@ अन्य: लेकिन यह एम है। उनमें से एक, वैसे भी। – ysth

+7

अपने आप को समझना आसान हो सकता है, लेकिन यह निश्चित रूप से एक बहुत अच्छा पर्ल सवाल है कि शुरुआती पूछने के लिए प्रवण हैं। मुझे नहीं लगता कि यह स्टैक ओवरफ्लो पर क्यों नहीं होना चाहिए। नुकसान कहां है? – innaM

उत्तर

30

use समारोह:

use ModuleName; 

निम्नलिखित कोड require समारोह का उपयोग कर के बराबर है:

BEGIN { 
    require ModuleName; 
    ModuleName->import; 
} 

BEGIN ब्लॉक के रूप में जल्द ही पार्सर इसे देखता है के रूप में चलाने के लिए इस कोड का कारण बनता है। require मॉड्यूल या die की कोशिश कर रहा है। और फिर मॉड्यूल के import फ़ंक्शन को कॉल किया जाता है। import फ़ंक्शन सभी प्रकार की चीजें कर सकता है, लेकिन नामस्थान में फ़ंक्शंस लोड करना आम है कि use डी (अक्सर Exporter मॉड्यूल के साथ)।

ऐसा नहीं है कि आयात नोट करना महत्वपूर्ण है कि इस मामले में कहा जाता है नहीं किया जाएगा:

use ModuleName(); 

उस मामले में, यह

BEGIN { 
    require ModuleName; 
} 
+1

मैनपेज कहता है कि यह * बिल्कुल * बराबर है :) – Inshallah

+1

@ इंशाल्ला मैं अपनी दोषपूर्ण स्मृति के लिए थोड़ा विग्लू कमरा छोड़ना चाहता हूं। –

15

perldoc -q "difference between require and use" से:

use Module, जैसे require Module है, सिवाय इसके कि use

4.1: संकलन समय पर मॉड्यूल लोड करता है, रन-टाइम नहीं।

4.2: उस पैकेज से वर्तमान में आयात प्रतीक और अर्थशास्त्र आयात करता है।

3

use रन टाइम पर require रन संकलन समय पर रन, और।

+3

'आयात' की कॉलिंग को न भूलें। –

+2

यह वह जवाब है जिसे वे पर्ल परीक्षण और नौकरी साक्षात्कार के लिए देख रहे हैं। आपको इसे याद रखना होगा! – Hawk

10

पर्ल महान प्रलेखन के साथ आता है के बराबर है। प्रत्येक कुछ महीनों में कम से कम एक बार पूरे दस्तावेज को पढ़ने से लाभ होगा।

C:\>perldoc -f require

अन्यथा require की मांग है कि एक पुस्तकालय फ़ाइल हो शामिल अगर यह नहीं किया गया है पहले से ही शामिल किया गया। फ़ाइल को डू-फाइल तंत्र के माध्यम से शामिल किया गया है, जो अनिवार्य रूप से केवल विभिन्न प्रकार के eval चेतावनी के साथ है कि आवेषण स्क्रिप्ट में लेक्सिकल चर शामिल कोड के लिए अदृश्य होगा।

... आदि: निम्नलिखित सबरूटीन के समान अर्थ विज्ञान हैइसी तरह,

C:\>perldoc -f use

कुछ अर्थ विज्ञान वर्तमान पैकेज में नामित मॉड्यूल से, आम तौर पर अपनी पैकेज में निश्चित सबरूटीन या चर नाम अलियासिंग से आयात करता है। यह

BEGIN { require Module; Module->import(LIST); } 

के बराबर है, सिवाय इसके कि मॉड्यूल एक शब्दकोष होना चाहिए।

... आदि

वहाँ भी है perlfaq entry हालांकि मुझे लगता है कि इसके बाद के संस्करण की तुलना में कम जानकारीपूर्ण है।

+1

अद्भुत 'perldoc' कमांड के अतिरिक्त, आप http://perldoc.perl.org –

+0

Ah के माध्यम से सभी दस्तावेज़ों तक पहुंच सकते हैं। आपके केबीडी टैग यह बताने में कठोर बनाते हैं कि एक लिंक क्या है (साथ ही साथ बहुत सुंदरता प्रदान नहीं करना)। – ysth