مدیریت خطا
die، warn و الگوهای بررسی خطا و ورودی.
die — خطای مهلک
die برنامه را با پیام خطا متوقف میکند:
sub divide {
my ($a, $b) = @_;
die "تقسیم بر صفر!" if $b == 0;
return $a / $b;
}
say divide(10, 2); { 5 }
say divide(10, 0); { برنامه میمیرد! }
warn — هشدار بدون توقف
sub process {
my ($val) = @_;
if ($val < 0) {
warn "مقدار منفی: $val — ادامه میدهیم";
}
return abs($val);
}
الگوی بررسی ورودی
sub set_age {
my ($age) = @_;
die "سن باید عدد باشد!" unless $age =~ /^\d+$/;
die "سن نامعتبر!" if $age > 150;
return $age;
}
eval — اجرای امن (مفهومی)
eval {
# کد خطرناک
die "مشکل پیش آمد!";
};
if ($@) {
say "خطا گرفتم: $@"; { پیام die در $@ }
}
say "برنامه ادامه دارد!";
eval مثل try/catch پرل است — اگر داخلش die شود، برنامه نمیمیرد و خطا در $@ میرود.
چکلیست دفاعی
- ☐ ورودیها را با regex اعتبارسنجی کنید
- ☐ قبل از تقسیم، صفر بودن مقسوم را چک کنید
- ☐ قبل از دسترسی به هش، exists کنید
- ☐ آرایه خالی را قبل از average چک کنید
مثال: تابع امن
sub safe_divide {
my ($a, $b) = @_;
return undef unless defined $a && defined $b;
warn "مقسوم صفر است" if $b == 0;
return $b == 0 ? undef : $a / $b;
}
my $r = safe_divide(10, 0);
if (defined $r) { say $r } else { say "نتیجه نامعتبر" }
خلاصه
- die = توقف، warn = هشدار
- eval برای گرفتن خطا (مفهومی)
- اعتبارسنجی ورودی = نصف باگها کم میشود!
این مبحث بخشی از دوره آموزش کامل پرل است.