سابروتین‌های پیشرفته

برگرداندن چند مقدار، توابع روی آرایه و هش، الگوهای عملی.

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;

خلاصه

این مبحث بخشی از دوره آموزش کامل پرل است.

ابزارهای مرتبط