Perl Language
उपवाद सम्भालना
खोज…
eval and die
यह थर्ड पार्टी लाइब्रेरी पर ट्राई :: टिनी की तरह भरोसा किए बिना "अपवादों" से निपटने का अंतर्निहित तरीका है।
my $ret;
eval {
$ret = some_function_that_might_die();
1;
} or do {
my $eval_error = $@ || "Zombie error!";
handle_error($eval_error);
};
# use $ret
हम इस तथ्य का "दुरुपयोग" करते हैं कि die
का गलत रिटर्न मूल्य है, और समग्र कोड ब्लॉक का रिटर्न मूल्य कोड ब्लॉक में अंतिम अभिव्यक्ति का मूल्य है:
- यदि
$ret
को सफलतापूर्वक सौंपा गया है, तो1;
अभिव्यक्ति आखिरी बात यह है कि में होता हैeval
कोड ब्लॉक। इस तरह सेeval
कोड ब्लॉक का एक सही मूल्य है, इसलिएor do
ब्लॉक ब्लॉक नहीं चलता है। - यदि
some_function_that_might_die()
करता हैdie
, तो पिछले बात यह है कि में होता हैeval
कोड खंड हैdie
।eval
कोड ब्लॉक का इस प्रकार गलत मान होता है औरor do
ब्लॉक ब्लॉक चलता है। - पहली चीज जिसे आपको करना चाहिए
or do
जिसमें ब्लॉक किया गया है, वह$@
। यह वैश्विक वैरिएबल धारण करेगा जोdie
लिए तर्क दिया गया था।|| "Zombie Error"
गार्ड लोकप्रिय है, लेकिन सामान्य मामले में अनावश्यक है।
यह समझना महत्वपूर्ण है क्योंकि कुछ कॉल डाई को कॉल करके सभी कोड विफल नहीं होते हैं, लेकिन समान संरचना का उपयोग किया जा सकता है। एक डेटाबेस फ़ंक्शन पर विचार करें जो वापस आता है:
- सफलता पर प्रभावित पंक्तियों की संख्या
- यदि क्वेरी सफल है, लेकिन कोई पंक्तियाँ प्रभावित नहीं हुईं तो
'0 but true'
-
0
यदि क्वेरी सफल नहीं थी।
उस मामले में आप अभी भी एक ही मुहावरा उपयोग कर सकते हैं, लेकिन आप अंतिम छोड़ करने के लिए है 1;
, और इस समारोह में अंतिम बात है। कुछ इस तरह:
eval {
my $value = My::Database::retrieve($my_thing); # dies on fail
$value->set_status("Completed");
$value->set_completed_timestamp(time());
$value->update(); # returns false value on fail
} or do { # handles both the die and the 0 return value
my $eval_error = $@ || "Zombie error!";
handle_error($eval_error);
};
Modified text is an extract of the original Stack Overflow Documentation
के तहत लाइसेंस प्राप्त है CC BY-SA 3.0
से संबद्ध नहीं है Stack Overflow