2012-08-06 29 views
5

परंपरागत रूप से, मेरे पास मेरे पीएटीएच चर में C:\perl\bin होगा, लेकिन संस्करण संघर्षों के कारण मैं C:\Perl-versionXY\bin स्थानों पर अलग-अलग पर्ल संस्करणों को रखना चाहता हूं और सीधे C:\Perl-...\bin\perl.exe theScript.pl पर सीधे अपने पर्ल स्क्रिप्ट को निष्पादित कर दूंगा।क्या मुझे पर्ल प्रोग्राम (विंडोज़ पर) चलाने के लिए पैथ में पर्ल बिन निर्देशिका की आवश्यकता है?

यह वास्तव में एक स्वचालित प्रणाली के तहत चलाया जाना है, जहां हम पहले से ही सभी perl स्क्रिप्ट के लिए सीधेC:\perl\bin\perl.exe का आह्वान करते हैं। (लेकिन C:\perl\binभी पथ में है।)

सुविधाजनक बनाने के लिए अलग अलग पर्ल संस्करणों पक्ष-साथ, मैं करने के लिए निकालने पथ से सी-पर्ल बिन यकीन है कि हम नहीं करना चाहते हैं, कभी भी किसी भी पर्ल संबंधित पाथ सेटिंग्स से साइड इफेक्ट्स देखें।

क्या यह काम करना चाहिए? मॉड्यूल के बारे में क्या है जिसके लिए अतिरिक्त डीएलएल फाइलों की आवश्यकता होती है (जैसे LibXML, जिसके लिए perl की बिन निर्देशिका में LibXML.dll की आवश्यकता होती है) ??

मैं साइड संस्करणों के साथ स्ट्रॉबेरी पर्ल पोर्टेबल का उपयोग करूँगा। (कौन सी रीडमे फ़ाइल कुछ पैथ सेटिंग्स का उल्लेख करती है, लेकिन इसका उल्लेख नहीं है कि किसके लिए उपयोग किया जाता है।)

+0

क्या आपका मतलब 'सी: \ bin \ perl' था, क्योंकि इससे बहुत अधिक समझ आएगी –

+1

@johncorbett: इससे और अधिक समझ क्यों आएगी? विंडोज यूनिक्स नहीं है, इसलिए इसमें कोई c: \ bin नहीं है। सी: \ perl \ bin पूरी तरह से समझ में आता है, IMHO – pavel

+0

हाहा, मुझे लगता है कि यूनिक्स बस मेरे सिर में इतना ड्रिल किया गया है, यहां तक ​​कि विंडोज़ पर भी मैं साइगविन –

उत्तर

1

बशर्ते कि सभी डीएलएल निष्पादन योग्य के समान निर्देशिका में हों, इसे सामान्य रूप से काम करना चाहिए। यदि पथ में पर्ल के लिए केवल एक प्रविष्टि है, तो DLL को निष्पादन योग्य (या कुछ स्पष्ट तर्क का उपयोग करके पाया जा रहा है) के समान निर्देशिका में होना चाहिए ताकि आपको ठीक होना चाहिए। जब एक निष्पादन योग्य डीएलएल लोड करता है, तो खोज की गई पहली जगह निष्पादन योग्य वाली निर्देशिका होती है।

यदि आप परेशानी में भाग लेते हैं, तो एक विकल्प प्रत्येक संस्करण के लिए कमांड फ़ाइल बनाना होगा। आप इन अलग-अलग नाम दे सकते हैं, जैसे perl58.cmd, perl514.cmd, आदि, उन्हें सभी को एक निर्देशिका में रखें, और उस निर्देशिका को पथ पर रखें। प्रत्येक आदेश फ़ाइल में, पथ के लिए इसी पर्ल निर्देशिका जोड़ने और फिर कमांड लाइन तर्क के साथ पर्ल का शुभारंभ:

setlocal कमान की
setlocal 
PATH=c:\perl58\bin;%PATH% 
perl %* 

नोट उपयोग इतना है कि पथ के लिए परिवर्तन करने के लिए वापस निर्यात नहीं कर रहा है कमांड लाइन विंडो आप कमांड फाइल चला रहे हैं।

0

मैं सावधानी बरतता हूं कि यदि आपके पास पाथ पर पर्ल बिन निर्देशिका नहीं है, और जो कुछ भी आप निष्पादित करते हैं उसे आमंत्रित करने का प्रयास करता है कार्यक्रम जो बिन डायर में एक स्पष्ट मार्ग प्रदान किए बिना रहता है (बुरी आदत है, लेकिन यह इसे होने से नहीं रोकता है) तो आपको विफलता मिलती है, और इस विफलता को कैसे संभाला जाता है, इस पर निर्भर करता है, सूक्ष्म और कठिन समस्याओं में प्रकट हो सकता है डिबग।

तो मैं कहता हूं, जब तक कि आपके पास इसे जोड़ने के लिए बहुत ही अनिवार्य कारण नहीं है (उदा। आईटी नीति जो इसे प्रतिबंधित रूप से कठिन और पीएटीएच में जोड़ने के लिए परेशान करती है), फिर इसे जोड़ें।

+0

ठीक है, अगर मेरे पास दो पर्ल बनाम हैं, तो 5.8 और एक 5.14 कहता है, मैं केवल अर्थात् इनमें से एक को (वैश्विक) पथ में जोड़ सकता हूं। यह दूसरे संस्करण के लिए गलत रास्ता होगा। तो ऐसा लगता है कि इसे वें (ग्लोबल) पथ में जोड़ने का कोई अर्थ नहीं लगता है और इसे संदर्भ में निर्भर करने के लिए इसे आवश्यक तरीके से पथ में नहीं रखना आसान होगा। –

+1

यह यूनिक्स सिस्टम पर शैल स्क्रिप्ट के साथ एक्जिक्यूटिव को लपेटने के लिए एक आम प्रथा है जो निष्पादन योग्य चलाने वाले वातावरण को कॉन्फ़िगर करता है। क्या कोई कारण है कि आप बैच या पावरशेल स्क्रिप्ट में अपने पर्ल प्रोग्राम के इनवोकेशन को लपेट नहीं सकते हैं? –