2012-12-19 21 views
12

मैं lib पथ में $ var चर का उपयोग करना चाहता हूं।आप lib पथ में एक चर का उपयोग कैसे करते हैं?

my $var = "/home/usr/bibfile;"

use lib "$var/lib/";

हालांकि यह एक त्रुटि फेंकता है जब मैं यह करते हैं।

मैं use lib "/home/usr/bibfile/lib/"; के बजाय use lib "$var/lib/"; का उपयोग करना चाहता हूं।

मैं एक चर निर्दिष्ट कैसे कर सकता हूं, ताकि इसका उपयोग lib मॉड्यूल की सेटिंग में किया जा सके?

+0

आप एक गैर मानक निर्देशिका में कुछ पुस्तकालय की क्या ज़रूरत है और आप इसका इस्तेमाल करना चाहते हैं? – xhudik

+0

हां। पुस्तकालय गैर मानक डीआईआर में हैं। – Sourcecode

उत्तर

20

सबसे पहले, आपके पास एक सरल वाक्यविन्यास त्रुटि है - आप पहली पंक्ति के बाद ; खो रहे हैं। my वैरिएबल अन्यथा use lib में ठीक काम करना चाहिए।

हालांकि, बाद से सभी use निर्देशों BEGIN ब्लॉक में क्रियान्वित कर रहे हैं, अपने चर जैसे ही आप use चलाने पर, अप्रारंभीकृत किया जाएगा ताकि आप BEGIN ब्लॉक में भी प्रारंभ कर दिया की जरूरत है।

my $var; 
BEGIN { $var = "/home/usr/bibfile"; } 
use lib "$var/lib/"; 

use Data::Dumper; 
print Dumper \@INC; 

देता है:

$VAR1 = [ 
     '/home/usr/bibfile/lib/', 
     # ... more ... 
    ]; 
+0

@ikegami, lib भी पाया जाता है और लक्ष्य के मानक संस्करण और आर्क उपनिर्देशिका जोड़ता है। –

1

आप क्या हासिल करने की कोशिश कर रहे हैं के बारे में सुनिश्चित नहीं हैं, लेकिन FindBin::libs के लिए एक कार्य की तरह लगता है:

my $var; 
BEGIN { $var = "/home/usr/bibfile" }; 
use FindBin::libs "Bin=$var", "base=lib"; 
+0

मैं 'उपयोग lib' का उपयोग करना चाहता हूं $ var/lib/";' lib का उपयोग करें "/ home/usr/bibfile/lib /"; '। मैं एक चर निर्दिष्ट कैसे कर सकता हूं, ताकि इसका उपयोग lib मॉड्यूल की सेटिंग में किया जा सके। – Sourcecode

+0

ठीक है, आपकी विशिष्ट ज़रूरत के अनुरूप उत्तर संपादित किया गया है :) हालांकि, मैं आपको हार्डकोडेड पूर्ण पथों का उपयोग करने से बचने और अपनी वर्तमान स्क्रिप्ट के सापेक्ष लोगों का उपयोग करने का सुझाव दूंगा (यह FindBin :: libs का उद्देश्य है) – creaktive

+1

@creaktive आपका उत्तर अब एक ही त्रुटि से पीड़ित है क्योंकि प्रश्नकर्ता के साथ शुरू करने का सामना करना पड़ा। आप स्वीकार किए गए उत्तर में समाधान का उपयोग करके इसे ठीक कर सकते हैं। – MattLBeck

-3

आप नहीं कर सकते, क्योंकि use संकलन समय पर निर्देश का मूल्यांकन किया जाता है, जबकि अन्य चर का रनटाइम पर मूल्यांकन किया जाता है।

अपने lib अपने मूल स्क्रिप्ट को कहीं रिश्तेदार स्थित है, तो आप मानक मॉड्यूल FindBin उपयोग कर सकते हैं:

# $Bin from FindBin is the directory of the original script 
use FindBin; 
use lib "$FindBin::Bin/path/to/bib"; 
use MyModule;