2012-07-08 15 views
9

मेरे पास संस्करण 5.6.1 के लिए लिखा गया एक पर्ल स्क्रिप्ट है और जिसमें ओरेकल पैकेज, डीबीआई पैकेज और अधिक सामान पर निर्भरता है। सबकुछ सही ढंग से स्थापित है और काम करता है।स्क्रिप्ट में निर्दिष्ट करने के लिए केवल perl के विशिष्ट संस्करण का उपयोग करने के लिए कैसे करें?

हाल ही में perl संस्करण 5.8.4 स्थापित हो गया है और क्योंकि उन निर्भरताओं को सही ढंग से सेट नहीं किया गया है, इसलिए स्क्रिप्ट विफल हो जाती है।

'पर्ल' कमांड अंक /program/perl_v5.8.4/bin/perl के लिए - नवीनतम संस्करण

तो, जब मैं अपने पर्ल स्क्रिप्ट मैं मैन्युअल कमांड प्रॉम्प्ट में निर्दिष्ट करना चलाने के लिए है

/program/perl_v5.6.1/bin/perl scriptName.pl 

/program/perl_v5.6.1/bin/perl 
use v5.6.1; 

लेकिन, इसका मतलब स्क्रिप्ट पर्ल संस्करण> 5.6.1

०१२३५१६४१०६१ लेने के लिए है:

मैं स्क्रिप्ट में निम्नलिखित लाइनों को जोड़ने की कोशिश की

मुझे कुछ संबंधित प्रश्न मिले जो सुझाए गए:

  1. पथ निर्यात करने के लिए। लेकिन, मैं चाहता हूं कि सभी उपयोगकर्ताओं के लिए स्क्रिप्ट को
  2. निर्यात करने के बिना स्क्रिप्ट को निर्यात करना है। लेकिन, मैं इस स्क्रिप्ट के लिए सिर्फ एक विशिष्ट संस्करण का उपयोग करना चाहता हूं।
  3. आदेशों का उपयोग/आवश्यकता है। उपरोक्त के समान ही मुद्दा।

मेरा प्रश्न: स्क्रिप्ट में केवल perl के विशिष्ट संस्करण का उपयोग करने के लिए कैसे निर्दिष्ट करें?

+1

मुझे खेद है कि अगर मैंने आपको गलत समझा, लेकिन क्या आप अपनी स्क्रिप्ट की पंक्ति में आपको #....! की आवश्यकता नहीं है? उदाहरण के लिए, '#!/प्रोग्राम/perl_v5.6.1/bin/perl' की तरह। – raina77ow

+0

मुझे लगता है कि वह शेबांग लाइन में शेबांग भूल गया था। –

+0

@ raina77ow सीनान सही है मेरे पास मेरी स्क्रिप्ट में '#!/प्रोग्राम/perl_v5.6.1/bin/perl' है। लेकिन यह अभी भी मुझे नवीनतम पर्ल इंस्टॉलेशन (perl -version) – JoshMachine

उत्तर

8
समस्या

कि दुभाषिया कुटिया लाइन (#!/some/path/to/perl) में निर्दिष्ट करता है, तो पर्ल स्क्रिप्ट इस तरह कहा जाता है प्रयोग नहीं किया जाता है:

perl some_script.pl

... 'डिफ़ॉल्ट' के रूप में (सरल करने के लिए) तब perl चुना जाता है। (chmod a+x साथ उदाहरण के लिए,)

./some_script.pl

बेशक

, इसका मतलब है कि इस फाइल निष्पादन योग्य बनाया जाना चाहिए: एक कुटिया के कच्चे शक्ति के बजाय फ़ाइल स्वयं को क्रियान्वित करते हुए उपयोग करना चाहिए।

+2

शेबांग वास्तव में अनदेखा नहीं किया जाता है। यदि आप पहले ही निर्दिष्ट कर चुके हैं तो यह शेबैंग लाइन से दुभाषिया का उपयोग नहीं करता है। –

+0

तो यदि विकल्प वहां दिए गए हैं, तो भी उनका उपयोग किया जाएगा? वास्तव में नहीं पता था, जवाब अद्यतन किया। – raina77ow

4

मैं अपने कोड में है:

our $LEVEL = '5.10.1'; 
our $BRACKETLEVEL = sprintf "%d.%03d%03d", split/\./, $LEVEL; 

if ($] != $currentperl::BRACKETLEVEL) 
{ 
    die sprintf "Must use perl %s, this is %vd!\n", $LEVEL, $^V; 
} 

ये वास्तव में दो अलग-अलग मॉड्यूल हैं, लेकिन यह है कि मूल विचार है। मैं बस use 5.10.1; की बजाय मेरी स्क्रिप्ट के शीर्ष पर "सही" का उपयोग करता हूं और यदि कोई डेवलपर उस उत्पाद के लिए गलत स्तर के पेर्ल का उपयोग करने का प्रयास करता है तो मुझे यह मर जाता है। हालांकि, यह कुछ और नहीं करता है जो use 5.10.1; करेगा (सख्त सक्षम करें, कहें जैसे स्विच, स्विच इत्यादि)।

+0

धन्यवाद टैंकलस। समस्या यह थी कि मैं स्क्रिप्ट को 'perl scriptName.pl' के रूप में चला रहा था, इसलिए यह मुझे नवीनतम perl स्थापना में ले जा रहा था। अब स्क्रिप्ट को 'scriptName.pl' के रूप में चला रहा है और यह मुझे 'शेबांग' और 'उपयोग' कमांड में उल्लिखित पर्ल संस्करण में ले जाता है। – JoshMachine

+0

उस पूरे चीज़ को 'BEGIN {} 'ब्लॉक में रखना बुद्धिमान होगा, ताकि संकलन समय पर यह जल्दी से विफल हो जाए। अन्यथा यह विफल होने से पहले, अपने सभी 'उपयोग() 'कथन (और अन्य संकलन-समय निर्देश) पहले करने जा रहा है। –

+0

असल में, केन, क्योंकि यह अपने मॉड्यूल में है (मुझे कट और पेस्ट से नफरत है, इसे किसी भी मॉड्यूल में रखने के लिए और अधिक समझ में आता है), यह निश्चित रूप से पहले से ही एक BEGIN में है, जब तक मैं 'आवश्यकता' के बजाय मॉड्यूल का उपयोग करता हूं '। और अगर मुझे इसकी आवश्यकता है, तो कोई भी 'BEGIN' ब्लॉक मदद करने जा रहा है। मैंने प्रासंगिक स्क्रिप्ट के शीर्ष के पास अपना 'उपयोग सही-सही;' लाइन भी लगाई। – Tanktalus

संबंधित मुद्दे

 संबंधित मुद्दे