2010-08-29 12 views
5

मैं एक पर्ल स्क्रिप्ट लिख रहा हूं, और उस हिस्से में जहां मैं कमांड लाइन पर उपयोगकर्ता द्वारा प्रदान किए गए विकल्पों की जांच कर रहा हूं, मैं विकल्पों के साथ क्या गलत था, यह समझने में त्रुटि के साथ बाहर निकलना चाहता हूं। इस मामले में, इस त्रुटि संदेश के साथ जाने के लिए स्टैक ट्रेस की कोई आवश्यकता नहीं है। तो एक त्रुटि संदेश के साथ मरने का सबसे अच्छा तरीका क्या है लेकिन कोई स्टैक ट्रेस या डीबग जानकारी नहीं है?त्रुटि के साथ मरने का सही तरीका क्या है लेकिन पर्ल में स्टैक ट्रेस के बिना?

मैं निम्नलिखित की कोशिश की है:

die "Invalid options"; 

जो

Invalid options at myscript.pl line 49. 

तब पैदा करता है, मैंने कोशिश की

use Carp; 
... 
croak "Invalid options"; 

जो

Invalid options at myscript.pl line 47 
    main::prepare_output_directory() called at myscript.pl line 546 
012 का उत्पादन

तो मैं Invalid options के साथ कैसे मर सकता हूं और कुछ और नहीं?

बोनस प्रश्न: croak क्यों मुझे बताता है कि त्रुटि 47 लाइन पर है, जब croak पर वास्तविक कॉल लाइन 49 पर है?

die "Invalid options\n"; 

यही से त्रुटि के स्थान पाएगा अपने संदेश के साथ जोड़ दिया जा रहा है:

+1

पुन: बोनस प्रश्न, अपने क्रोक के लिए अधिक संदर्भ दिखाएं? – ysth

+0

बोनस प्रश्न पर कभी भी ध्यान न दें। मैं बस सोच रहा था कि क्या कुछ सामान्य कारण हो सकता है। –

+0

आपके बोनस प्रश्न के लिए: 'croak' कॉलर के परिप्रेक्ष्य से लाइन नंबर की रिपोर्ट करने का प्रयास करता है। [कार्प] (http://perldoc.perl.org/Carp.html) मॉड्यूल के लिए दस्तावेज़ पढ़ें। –

उत्तर

18

बस die स्ट्रिंग के अंत में एक नई पंक्ति डाल दिया।

+20

मुझे लगता है कि वे प्रलेखन पढ़ते हैं। [perldoc -f die] (http://perldoc.perl.org/functions/die.html) –

+1

मेरी इच्छा है कि 'क्रोक' के साथ ऐसा करने का एक तरीका था। मेरी समझ यह है कि अर्थात्, 'मर' आंतरिक त्रुटियों के लिए है, जबकि 'क्रोक' बाहरी कुछ के कारण त्रुटियों के लिए है। इस मामले में, मैं यह इंगित करना चाहता हूं कि उपयोगकर्ता ने अमान्य विकल्प दर्ज किए हैं, जो स्पष्ट रूप से उत्तरार्द्ध का मामला है। फिर भी मुझे पीछे हटने के लिए क्रोक के बजाय मरना होगा। –

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