2012-03-09 12 views
6

पर्ल में, हम कर सकते हैं:उपयोग lib

उपयोग lib सूची;

@INC में पथों की एक सूची शामिल करने के लिए। इसी तरह, हम कर सकते हैं:

यदि कंडीशन, मॉड्यूल => तर्क;

एक मॉड्यूल को सशर्त रूप से शामिल करने के लिए।

, कुछ की तरह

उपयोग lib अगर शर्त, सूची दोनों का मिश्रण करने के लिए क्या यह संभव है;

सशर्त रूप से पथों की सूची शामिल करने के लिए। यह काम नहीं लग रहा है।

संपादित करें: क्षमा करें, लेकिन मैं अभी भी इसे काम नहीं कर सकता। इस तरह मैं कर रहा हूं लेकिन यह काम नहीं कर रहा है। क्या आप सुझाव दे सकते हैं कि क्या गलत है?

use Data::Dumper; 

BEGIN { 
    my $env=$ENV{'ENV'}; 
    use if $env eq 'OLD', lib => '/home/vivek/OLD'; 
    use if $env eq 'NEW', lib => '/home/vivek/NEW'; 
} 

print Dumper \@INC; 
+2

आपकी स्थिति संकलन समय पर हल करने योग्य है। – tchrist

+0

मुझे लगता है कि यह एक चर के लिए $ ENV {'ENV'} असाइन करने के बजाय और फिर इसका उपयोग करने के बजाय, यह काम करता है, इसके बजाय मैं सीधे $ ENV {'ENV'} का उपयोग करता हूं। लेकिन BEGIN ब्लॉक में $ env की गणना नहीं की जा सकती है। – Vivek

+0

आपका उदाहरण काम नहीं करेगा। असाइनमेंट 'मेरा $ env = ...' 'if if' के बाद चलाएगा। 'अगर उपयोग करें' पहले जाता है। आपको एक पूर्ण रूप से संलग्न 'BEGIN' ब्लॉक होना चाहिए जो एक गैर-चर के लिए असाइन किया गया हो, और उसके बाद उस ब्लॉक के बाहर और नीचे, आपके' उपयोग 'अगर आपके पास चर कहा गया हो। – tchrist

उत्तर

10

if एक अलग मॉड्यूल (सख्ती से एक pragma) कि पैरामीटर के रूप में लाइन के बाकी लेता है। lib भी एक अलग प्रगति है। दस्तावेज वाक्य रचना use if CONDITION, MODULE => ARGUMENTS पर एक नजर डालें और आपको लगता है कि तुम क्या लिख ​​दिया जाना चाहिए

use if CONDITION, lib => LIST; 

जो ठीक काम करता है है देखेंगे।

+4

लोग हमेशा भूल जाते हैं कि स्थिति में केवल संकलन-समय अभिव्यक्तियां शामिल हो सकती हैं। – tchrist

+0

@tchrist - अभिव्यक्ति केवल 'BEGIN {}' ब्लॉक में गणना की गई एक चर हो सकती है, सही? – DVK

+0

* शर्त * संकलन में प्रासंगिक बिंदु पर उपलब्ध कुछ भी हो सकता है, इसलिए पैकेज के चर और subroutines सहित पिछले 'BEGIN' ब्लॉक में कुछ भी। (ध्यान दें कि इस तरह के एक उपरोक्त में स्पष्ट रूप से किसी भी निर्भरता को भी उपलब्ध होने पर उपलब्ध होना चाहिए।) – Borodin