2010-08-30 12 views
28

मैं यह देखने के लिए सिंटैक्स जांच का उपयोग कर रहा हूं कि मेरी पर्ल स्क्रिप्ट सही तरीके से उपयोग की जा रही है या नहीं। अगर वाक्यविन्यास सही नहीं है, तो मैं एक संदेश दिखाता हूं कि सही वाक्यविन्यास क्या है, और उसके बाद प्रोग्राम के निष्पादन को समाप्त करें।पर्ल में एक प्रोग्राम को कैसे समाप्त करें - बाहर निकलें या मर जाएं?

print "Please use the following syntax: ..."; 
exit 1; 

और:

die("Please use the following syntax: ..."); 

एक कौन सा उपयोग करना चाहिए

बीच

? मुझे पता है कि die उत्तर दिया गया होगा अगर अपवाद हैंडलिंग जगह पर था, लेकिन ऐसा नहीं है।

अपवाद प्रबंधन के बिना प्रोग्राम समाप्ति के लिए कौन सी बेहतर विकल्प है? कृपया यह भी कहें क्यों।

+5

यह ध्यान देने योग्य है कि 'मरने' स्वचालित रूप से फ़ाइल नाम और रेखा संख्या को जोड़ता है * जब तक कि त्रुटि स्ट्रिंग एक नई लाइन '\ n "' के साथ समाप्त न हो। –

उत्तर

34

यह इस बात पर निर्भर करता है कि आप एसटीडीईआरआर और एसटीडीओटीटी के साथ क्या करना चाहते हैं। मैं एसटीडीईआरआर को त्रुटि और चेतावनी प्रकार संदेश भेजना पसंद करता हूं ताकि जब कोई फ़ाइल में आउटपुट रीडायरेक्ट करने का प्रयास कर रहा हो, तब भी वे त्रुटि संदेश देखते हैं; हालांकि, ऐसे समय होते हैं जब उपयोगकर्ता को स्थिति को संवाद करने के लिए एसटीडीओयूटी का उपयोग किया जाता है, इसलिए वह tail -f कर सकता है या इसे पृष्ठित कर सकता है, और उस समय एसटीडीईआरआर को लिखने से उन्हें दर्द होता है (उन्हें एसटीडीईआरआर को 2>&1 के साथ STDOUT में रीडायरेक्ट करना होगा, और नहीं हर कोई जानता है कि यह कैसे करें)। तो उपयोग करने के लिए, die या print और exit, इस बात पर निर्भर करता है कि आप किस प्रकार के प्रोग्राम लिख रहे हैं।

अन्य लाभ/die उपयोग करने के लिए कमियां हैं:

  • आप जाल die एक eval साथ है, लेकिन बाहर निकलने नहीं कर सकते
  • आप कोड जब कार्यक्रम के लिए एक संकेत प्रबंधक को इंस्टॉल करके die कॉल चला सकते हैं __DIE__ संकेत
  • आप आसानी से die समारोह ओवरराइड कर सकते हैं

उनमें से प्रत्येक के पास ऐसा करने में सक्षम होने के लिए आसान होता है, और कई बार जब यह दर्द होता है तो उन्हें किया जा सकता है।

+0

क्या होगा यदि आप त्रुटि संदेश को चेतावनी देते हैं और फिर 'exit' का उपयोग करते हैं? क्या आप मान लेंगे कि दोनों में से सर्वश्रेष्ठ हो रहा है? – Arc676

+1

@ Arc676 यह देखते हुए कि 'चेतावनी' एसटीडीईआरआर को लिखती है, साथ ही मुझे नहीं पता कि यह वर्णित परिदृश्य में 'प्रिंट' और 'बाहर निकलने' से बेहतर कैसे हो सकता है। यह याद रखना महत्वपूर्ण है कि कोई "सर्वश्रेष्ठ" नहीं है; केवल ऐसे व्यवहार हैं जो कुछ परिस्थितियों में फायदेमंद/हानिकारक हो सकते हैं। आम तौर पर, सही उत्तर 'मरने' के लिए होता है क्योंकि यह कार्यक्रम में सबसे लचीलापन की अनुमति देता है, लेकिन आपको यह ध्यान रखना होगा कि प्रोग्राम का उपयोगकर्ता आउटपुट का उपभोग कैसे करेगा। –

21

printSTDOUT को प्रिंट लेकिन STDERR

exit 1errno के निकास वर्तमान मूल्य है कि है $!

इसलिए die साथ 1 लेकिन die बाहर निकलता है के निकास की स्थिति के साथ बाहर निकलता है के लिए die प्रिंट अपने सरल और के रूप में पसंदीदा तरीका है कम।

+5

या '$? >> 8' अगर '$!' '0' है। या 255 अगर '$? >> 8' 0. –

+0

@ चास: '$!', '$?' क्या हैं? – Lazer

+1

[$ OS_ERROR] (http://p3rl.org/var#%24OS_ERROR), [$ CHILD_ERROR] (http://p3rl.org/var#%24CHILD_ERROR) – daxim

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