अद्यतन
एक अनाम उपयोगकर्ता मैं अपने जवाब में एक बग को सही करने में सक्षम है के लिए धन्यवाद। catch
ब्लॉक में वांछित प्रभाव नहीं था, क्योंकि यह केवल catch
सबराउटिन से लौटा था।
यदि कोई अपवाद नहीं था, try
try
ब्लॉक का मान देता है, अन्यथा catch
ब्लॉक का मान। तो insert
सफल होने पर यह संस्करण सही ढंग से निष्पादित करता है और $c->redirect("/index")
का मान देता है, अन्यथा यह $c->show_error($_)
का मान देता है और देता है।
sub insert_exec {
my ($self, $c, $args) = @_;
my ($params, $table, $model) = $self->_init({context => $c, args => $args});
try {
$model->insert($table, $params);
$c->redirect("/index");
}
catch {
$c->show_error($_);
};
}
Try::Tiny
काफी के रूप में eval
साथ निपटने त्रुटि सही सामान्य स्थिति में पाने के लिए वास्तव में बहुत कठिन है आवश्यक है। मॉड्यूल के प्रलेखन का कहना है कि यह
यह मॉड्यूल बेयर हड्डियों को कोशिश/पकड़/आखिरकार बयान प्रदान करता है जो eval ब्लॉक के साथ सामान्य गलतियों को कम करने के लिए डिज़ाइन किए गए हैं, और कुछ भी नहीं।
इस मॉड्यूल का मुख्य फोकस उन लोगों के लिए सरल और विश्वसनीय त्रुटि प्रबंधन प्रदान करना है जो अभी भी बॉयलरप्लेट की 5 लाइनों के बिना सही eval ब्लॉक लिखना चाहते हैं।
आपका कोड इस
use Try::Tiny;
sub insert_exec {
my ($self, $c, $args) = @_;
my ($params, $table, $model) = $self->_init({context => $c, args => $args});
try {
$model->insert($table, $params);
}
catch {
return $c->show_error($_);
};
$c->redirect("/index");
}
कैसा दिखेगा जो मुझे आशा है कि आप इस बात से सहमत हूँ बहुत अच्छे है।
दो अंक उल्लेखनीय हैं:
try
और catch
सबरूटीन्स भाषा शब्द की तरह लग रहे करने के लिए कोडित रहे हैं। इसका मतलब अंतिम समापन ब्रेस के बाद एक अर्धविराम आवश्यक है।
उसी कारण से, return
try
या catch
ब्लॉक के भीतर अपेक्षा के अनुरूप काम नहीं होगा, और बस ब्लॉक बाहर निकल जाएगा, माता पिता सबरूटीन की ओर लौटने। ऊपर मेरा अपडेट देखें।
catch
ब्लॉक [email protected]
के भीतर try
से पहले इसका मूल मूल्य है। त्रुटि से उत्पन्न मूल्य $_
यह वास्तव में बहुत अच्छा है – ado
एक * अज्ञात उपयोगकर्ता * जिसने टिप्पणी पोस्ट करने के लिए अपर्याप्त प्रतिष्ठा थी, इस पाठ को जोड़ने के लिए मेरे उत्तर को संपादित करने का प्रयास किया। यह एक बहुत अच्छा मुद्दा है और मैंने एक उचित अद्यतन किया है। * 'Try :: Tiny' के साथ निर्माण अच्छा है लेकिन मूल पोस्ट से काफी अलग है। जैसा कि आपने लिखा है और ब्लॉक को पकड़ने के लिए सबराउटिन हैं, इस प्रकार कैच के अंदर वापसी केवल 'insert_exec' से नहीं, अज्ञात उप से होती है। इसका मतलब है कि अपवाद के मामले में रीडायरेक्ट भी किया जाता है। यह 'ट्री :: टिनी' का एक आम नुकसान है। * – Borodin