के बारे में संकलन बनाम-रन-टाइम:
पर्ल में, मॉड्यूल (संकुल/नामस्थान) आम तौर पर अलग फ़ाइलों में रहते हैं। अर्थात। Some::Module
कुछ/Module.pm में मिलेगा। इस सेटअप में, संकलन-बनाम रन-टाइम अंतर इससे कोई फर्क नहीं पड़ता। use()
के माध्यम से लोड होने वाले मॉड्यूल का रन-टाइम कॉलिंग कोड के संकलन-समय से पहले होगा। ऑब्जर्वर:
फ़ाइल Some/Module.pm
:
package Some::Module;
BEGIN{ print "Some::Module - compile time\n" }
print "Some::Module - run time\n";
1;
फ़ाइल test.pl
:
BEGIN{ print "Just started compiling the program.\n" }
use Some::Module;
BEGIN{ print "main - compile time\n" }
print "main - run time\n";
उत्पादन होगा:
Just started compiling the program.
Some::Module - compile time
Some::Module - run time
main - compile time
main - run time
इसलिए, एक our @ISA = qw(Base);
के संकलन से पहले निष्पादित किया जाएगा आपके टी लोड करने के बाद मुख्य कार्यक्रम जारी है वह मॉड्यूल।
यह सही है, हालांकि, @ISA
को असाइन करना यह सुनिश्चित नहीं करता है कि बेस क्लास लोड हो गया है। यही कारण है कि हमारे पास use base
और use parent
प्रागमा हैं। यदि आपको विशेष रूप से use base
(फ़ील्ड) की किसी भी विशेषताओं की आवश्यकता नहीं है और न ही use parent
पर प्रदान की जाने वाली लंबी पिछली संगतता की आवश्यकता है, तो मेरा सुझाव है कि आप अधिक हल्के वजन use parent
का उपयोग करें।
'बेस' और' पैरेंट 'मॉड्यूल आपको संकलन समय पर आईएसए रिश्तों को स्थापित करने की अनुमति देता है। इसके विपरीत, 'आईएसए' को संशोधित करना रन टाइम पर होता है। इस प्रकाश में, आपके प्रश्न को फिर से भरने का एक तरीका इस तरह है: क्या यह आमतौर पर बाद में विरासत स्थापित करने के लिए फायदेमंद है (संकलन-समय), और यदि ऐसा है तो क्यों? इन संबंधित प्रश्नों को भी देखें: http://stackoverflow.com/questions/1378309/whats-the-difference-between-use-base-and-isa-in-perl/1379276 और http://stackoverflow.com/questions/ 876,471/क्या-है-अंतर-बीच माता पिता और आधार में पर्ल-5। – FMc
'BEGIN {@ISA = ...}; 'संकलन-समय पर भी होता है। – friedo
@ एफएम टिप्पणी के लिए धन्यवाद :-) मैंने प्रश्न –