سابروتینهای پیشرفته
برگرداندن چند مقدار، توابع روی آرایه و هش، الگوهای عملی.
sub روی آرایه
sub sum_all {
my @nums = @_;
my $sum = 0;
$sum += $_ foreach @nums;
return $sum;
}
sub average {
my @nums = @_;
return 0 unless @nums; { محافظ آرایه خالی }
return sum_all(@nums) / scalar @nums;
}
say sum_all(1..10); { 55 }
say average(10, 20, 30); { 20 }
sub روی هش
sub best_student {
my %grades = @_;
my ($best, $score) = ("", 0);
foreach my $name (keys %grades) {
if ($grades{$name} > $score) {
$best = $name;
$score = $grades{$name};
}
}
return ($best, $score);
}
my %g = (Ali => 18, Sara => 20, Reza => 15);
my ($name, $score) = best_student(%g);
say "بهترین: $name با $score";
تابع تولیدکننده ساختار
sub make_counter {
my $count = 0;
return {
inc => sub { return ++$count }, { closure! }
};
}
closure (تابع داخل تابع که متغیر بیرونی را یادش میماند) — مبحث پیشرفته پرل. فعلاً با ساختارهای ساده کار کنید.
الگوی تمیزکننده
sub trim {
my ($s) = @_;
$s =~ s/^\s+//; { حذف فاصله اول }
$s =~ s/\s+$//; { حذف فاصله آخر }
return $s;
}
say "[" . trim(" hello ") . "]"; { [hello] }
چینش برنامه خوب
# ۱. use strict/warnings
# ۲. ثابتها
# ۳. سابروتینها
# ۴. برنامه اصلی
sub helper1 { ... }
sub helper2 { ... }
# ---- main ----
my $data = helper1();
say $data;
خلاصه
- sub میتواند لیست/ارجاع برگرداند
- پاس دادن آرایه/هش به sub
- الگوهای عملی: sum، average، trim
این مبحث بخشی از دوره آموزش کامل پرل است.