2011-05-11 12 views
5

जब मैं निम्नलिखित कोड निष्पादित करता हूं, तो मुझे Can't locate SomePackage.pm in @INC ... मिलता है।BEGIN ब्लॉक में पहले 'उपयोग' कथन का निष्पादन क्यों किया जाता है?

BEGIN { 
    die; 
    use SomePackage; 
} 

usedie से पहले क्यों मार डाला जाता है?

+1

बिल्कुल यकीन नहीं है लेकिन उपयोग संकलन समय पर मूल्यांकन किया जाता है और रन टाइम पर मर जाता है। – Toto

+0

@ एम 42 वैसे, संकलन समय पर 'BEGIN' ब्लॉक का भी मूल्यांकन किया जाता है। पर्ल आर्कना के लिए –

उत्तर

9

use SomePackage, कि है, पल यह है पूरी तरह से परिभाषित बिल्कुल

BEGIN { require SomePackage; SomePackage->import } 

के बराबर है एक BEGIN कोड ब्लॉक जितनी जल्दी हो सके मार डाला जाता है। दूसरा BEGIN (जो use द्वारा निहित है) पूरी तरह से पहले परिभाषित किया गया है, और इस प्रकार इसे पहले निष्पादित किया जाता है।

+0

+1। आउच। – Axeman

0

http://perldoc.perl.org/functions/use.html

क्योंकि उपयोग संकलन समय में प्रभावी होता है से, यह कोड संकलित किया जा रहा है की साधारण प्रवाह नियंत्रण सम्मान नहीं करता।