2009-04-01 2 views
29

क्या यह निर्धारित करने का कोई तरीका है कि वर्तमान फ़ाइल को पर्ल स्रोत में निष्पादित किया जा रहा है या नहीं? अजगर में हम निम्नलिखित निर्माण के साथ ऐसा करते हैं:क्या पाइथन के `if __name__ == '__main __'` के बराबर एक पर्ल है?

if __name__ == '__main__': 
    # This file is being executed. 
    raise NotImplementedError 

मैं एक साथ FindBin और __FILE__ का उपयोग कर कुछ हैक कर सकते हैं, लेकिन मैं वहाँ ऐसा करने का एक वैधानिक तरीका है उम्मीद कर रहा हूँ। धन्यवाद!

उत्तर

41
unless (caller) { 
    print "This is the script being executed\n"; 
} 

caller देखें। यह मुख्य स्क्रिप्ट में undef देता है। ध्यान दें कि यह सब-आउटटाइन के अंदर काम नहीं करता है, केवल शीर्ष-स्तरीय कोड में।

3

unless caller अच्छा है, लेकिन एक और अधिक प्रत्यक्ष रूप से समानांतर है, साथ ही एक और अधिक स्पष्ट जांच, है:

use English qw<$PROGRAM_NAME>; 

if ($PROGRAM_NAME eq __FILE__) { 
    ... 
} 

बस सोचा था कि मैं वहाँ है कि बाहर कर दिया था।

संपादित

ध्यान रखें कि $PROGRAM_NAME (या '$0') लिखने योग्य है, इसलिए इस निरपेक्ष नहीं है। लेकिन, अधिकांश अभ्यास में - दुर्घटना, या रैंपिंग मॉड्यूल को छोड़कर - यह संभवतः बदला नहीं जाएगा, या locally पर किसी अन्य दायरे में बदल दिया जाएगा।

+0

यह काम करने की गारंटी नहीं है। एक बात के लिए, $ 0 ($ PROGRAM_NAME का वास्तविक नाम) वास्तव में पर्ल में एक लिखने योग्य चर है। लेकिन __FILE__ $ 0 को बदलकर प्रभावित नहीं है। – cjm

+0

@cjm: अस्वीकरण जोड़ा गया। – Axeman

+0

न केवल $ 0 म्यूटेबल है, [इसलिए '__FILE__'] है (http://perldoc.perl.org/perlsyn.html#Plain-ld-comments-%28Not%21%29)। – tchrist