अंतिम बार मैंने चेक किया, Error बहिष्कृत किया गया था। लेकिन यहाँ आप इसे कैसे कि मॉड्यूल के बिना करना होगा है:
eval {
die "Oops!";
1;
} or do {
my $e = [email protected];
print("Something went wrong: $e\n");
};
असल में, eval बजाय try
, diethrow
के बजाय का उपयोग करें, और [email protected]
में अपवाद के लिए लग रही है। Eval ब्लॉक के अंत में सही मान [email protected]
को अनजाने में बदलने से रोकने के लिए एक मुहावरे का हिस्सा है, जिसका उपयोग 5.14 से पुराने पर्ल संस्करणों में फिर से किया जाता है, विवरण के लिए P::C::P::ErrorHandling::RequireCheckingReturnValueOfEval देखें। उदाहरण के लिए, यह कोड इस दोष से पीड़ित है।
# BAD, DO NOT USE WITH PERLS OLDER THAN 5.14
eval {
die "Oops!";
};
if (my $e = [email protected]) {
print("Something went wrong: $e\n");
}
# BAD, DO NOT USE WITH PERLS OLDER THAN 5.14
लेकिन ध्यान दें कि कई पर्ल संचालन अपवाद जब वे असफल न बढ़ाएं; वे बस एक त्रुटि कोड लौटते हैं। बिल्टिन और मानक मॉड्यूल के लिए इस व्यवहार को autodie के माध्यम से बदला जा सकता है। आप autodie
उपयोग कर रहे हैं, तो ट्राई/कैच करने का मानक तरीका यह है (सीधे autodie perldoc में से):
use feature qw(switch);
eval {
use autodie;
open(my $fh, '<', $some_file);
my @records = <$fh>;
# Do things with @records...
close($fh);
};
given ([email protected]) {
when (undef) { say "No error"; }
when ('open') { say "Error from open"; }
when (':io') { say "Non-open, IO error."; }
when (':all') { say "All other autodie errors." }
default { say "Not an autodie error at all." }
}
एक स्टैकट्रेस हो रही के लिए, Carp को देखो।
स्रोत
2012-04-26 23:57:14
मैं इस चेतावनी को लॉग में कैसे डंप करूं? – pitchblack408
क्या मैं अपवाद बना सकता हूं? – pitchblack408
मुझे यकीन नहीं है कि आप क्या पूछ रहे हैं। आप उन्हें लॉग इन करके लॉग फ़ाइलों में चीजें डंप करते हैं और आप 'die' या' croak' का उपयोग करके अपवाद बनाते हैं। क्या आप अपवाद वस्तुओं आदि को एक साथ कैसे रखना चाहते हैं? यह एक अलग सवाल होगा। –