मैं एक पर्ल फ़ंक्शन को परिभाषित करना चाहता हूं (इसे "अंतर" कहते हैं) जो कमांड-लाइन तर्क पर निर्भर करता है। निम्नलिखित कोड काम नहीं करता:मैं पर्ल सबराउटिन को सशर्त रूप से परिभाषित कैसे कर सकता हूं?
if ("square" eq $ARGV[0]) {sub difference {return ($_[0] - $_[1]) ** 2}}
elsif ("constant" eq $ARGV[0]) {sub difference {return 1}}
ऐसा लगता है कि हालत नजरअंदाज कर दिया है, और इसलिए "अंतर" समारोह $ [0] ARGV के मूल्य की परवाह किए बिना दूसरी परिभाषा हो जाता है।
मैं समारोह में एक शर्त रख कर कोड काम कर सकते हैं:
sub difference {
if ("square" eq $ARGV[0]) {return ($_[0] - $_[1]) ** 2}
elsif ("constant" eq $ARGV[0]) {return 1}
}
लेकिन यह वास्तव में मेरा इरादा नहीं है - मैं शर्त की जरूरत नहीं है निष्पादन के दौरान हर बार मूल्यांकन किया जाना। मुझे बस कार्य की परिभाषा को प्रभावित करने के लिए एक तरीका चाहिए।
मेरे प्रश्न हैं:
- पहले निर्माण क्यों काम नहीं करता है?
- यह कोई त्रुटि क्यों नहीं देता है, या कुछ अन्य संकेत है कि कुछ गलत है?
- क्या पर्ल में सशर्त रूप से कार्यों को परिभाषित करने का कोई तरीका है?
जब आप इसमें हों, तो आप यह सुनिश्चित करना चाहेंगे कि आप या तो ए) मरने से पहले अमान्य तर्क हैं या बी) यदि पहले दो कथनों में से कोई भी काम नहीं करता है तो तीसरी परिभाषा है। यदि आप कॉल करने और अंतर करने का प्रयास करते हैं तो यह बुरा होगा और यह वहां नहीं है। –
जब आप "सख्त उपयोग नहीं करते हैं, चेतावनियों का उपयोग करें 'सभी';" ये आपके द्वारा चलाए जाने वाली समस्याओं के प्रकार हैं। – JDrago