Sunday 15 April 2012

perl - Change the position of program lead to syntax error -


मेरे पास shuffle.pl प्रोग्राम है। जब मैं perl shuffle.pl इनपुट का उपयोग करता है निष्पादित करने के लिए, यह सफलता काम करता है और कोई त्रुटि नहीं दिखाता है।

मैं ./ tools नामक निर्देशिका बना रहा हूं मेरी होम डायरेक्टरी, और मैं इस पथ को .cshrc पर सेट करता हूं। इसलिए मैं निष्पादित करने के लिए perl टाइप किए बिना प्रोग्राम निष्पादित कर सकता हूं। (यह मेरी पहली बार ऐसा करने के लिए है, शायद यहां कुछ गलत है)

लेकिन जब मैं फेरबदल करना चाहता हूँ। Pl को ~ / .tools और निष्पादित करना। यह दिखा रहा है कि मुझे लाइन 5 में त्रुटि है लेकिन अगर मैं perl ~ / .tools / shuffle.pl का उपयोग करता हूं तो यह काम कर सकता है तो इसका मतलब है कि मेरे प्रोग्राम में कोई वाक्यविन्यास त्रुटि नहीं होनी चाहिए, लेकिन मेरे प्रोग्राम को ~ / .tools

त्रुटि संदेश

  करने के बाद क्यों काम नहीं कर सकता। उपकरण / शफल। प्लल: 5: सिंटैक्स त्रुटि: "(" अप्रत्याशित   

। Cshrc

  सेट पथ = (। ~ ~ / .tools / sbin / Bin / usr / sbin / usr / bin / usr / games / usr / local / sbin / usr / स्थानीय / bin)   

 यहाँ छवि विवरण दर्ज करें

धन्यवाद

यहाँ मेरा कार्यक्रम है

  #! / Usr / bin / perl सख्त का उपयोग करें; चेतावनियों का उपयोग करें; सूची :: यूटीएल qw का उपयोग करें (पहले अधिकतम maxstr मिनट minstr shuffle राशि को कम); खोलें (मेरी $ एफएच, "& lt;", "$ ARGV [0]"); मेरा @ लाइनों = रीडलाइन ($ एफएच); मेरा @ शफ़ेड = शफल (@ लाइन्स); करीब $ एफएच; ओपन (मेरा $ शफ, "& gt;", "$ ARGV [1]"); $ shuf @ shuffled; Shuf;   

यहां छवि विवरण दर्ज करें

शेबांग को यह बताने के लिए उपयोग किया जाता है कि किस दुभाषिए के लिए उपयोग किया जाना चाहिए यह स्क्रिप्ट इसके लिए काम करने के लिए, जादू संख्या #! को फ़ाइल की तत्काल शुरुआत में दिखना होगा। अन्यथा, डिफ़ॉल्ट इंटरप्रेटर का उपयोग किया जाता है।

इस मामले में, शेबांग को कुछ खाली रेखाओं से पहले किया गया था। उन्हें निकालना होगा।

जब कोई स्पष्ट दुभाषिया का उपयोग फाइल निष्पादित करने के लिए किया जाता है, तो शेबांग को पार्स नहीं किया जाता है, उदा। में $ perl script.pl
केवल निष्पादन योग्य के रूप में लॉन्च किया जाता है: । / Script.pl । उस स्थिति में, कर्नेल को यह पता लगाया जाता है कि इसके साथ क्या करना है: संकलित प्रोग्राम के रूप में स्मृति में लोड करें? एक दुभाषिया शुरू करें? कौनसा? #! की तरह जादू संख्याओं को हल करें।

सामान्यतः, अगर शेबांग काम नहीं करता है, तो निम्न संभावित त्रुटियों की जांच हो सकती है:

  • एक यूटीएफ बाइट क्रम चिह्न #! से पहले होता है।
    निदान: एक हेक्सडम्प दिखाता है FE FF शुरुआत में।
    < Em> समाधान: BOM के बिना फाइलों को स्टोर करने के लिए अपने संपादक को कॉन्फ़िगर करें
  • स्क्रिप्ट इस तरह एन्कोड किया गया है कि शुरुआत #! को एन्कोड नहीं करता है ASCII । निदान: फ़ाइल #! के साथ शुरू नहीं होती है जब एएससीआईआई के रूप में खोला जाता है या ये हेक्सडम्प में 23 21 से शुरू नहीं होता है। या आपका संपादक यूटीएफ -16 या यूटीएफ -32 को एन्कोडिंग के रूप में दिखाता है।
    समाधान: एएससीआईआई-संगत एन्कोडिंग में स्क्रिप्ट को स्टोर करें यूटीएफ -8 एक विशेष रूप से अच्छा विकल्प है।
  • गैर-मूल लाइन अंत को निष्पादन योग्य नाम का हिस्सा बनने में भ्रमित किया जा सकता है। जैसे विंडोज़ लाइन के अंत के साथ, शेबांग में

      #! / Usr / bin / perl प्रिंट 1;   

    दुभाषिया का नाम "/ usr / bin / perl \ r" के रूप में लिया जा सकता है। कई फाइल सिस्टम फ़ाइल नामों के अंदर रेखा के अंत की अनुमति देते हैं।
    निदान: हेक्सडम्प एक स्थान ( 20 ) या नई लाइन ( 0A ) निष्पादन योग्य नाम के बाद।
    समाधान: लाइन के अंत को यूनिक्स में कनवर्ट करें।

No comments:

Post a Comment