בחלק זה של המדריך לפרל אנחנו הולכים לדבר על לולאת ה-for ב-Perl. יש המכנים אותה לולאת for בסגנון C,אך למעשה מבנה זה קיים בשפות תיכנות רבות.

לולאת for בפרל

מילת המפתח for בפרל יכולה לשמש בשני אופנים שונים. היא יכולה לפעול כמו לולאתforeachוהיא יכול לפעול כמו לולאה עם 3 פרמטרים כמו ב-C. היא נקראת לולאה בסגנון C, או C-style למרות שהיא קיימת בשפות תיכנות רבות.

אתאר כאן את השימוש הזה, למרות שאני מעדיף לכתוב לולאות foreach כפי שהן מתוארות בחלק על מערכים בפרל.

ניתן להשתמש בשתי מילות המפתח for ו כמילים נרדפות פרל כבר תבין למה התכוונתם

ללולאה בסגנון C יש שלושה חלקים בפתיחת הלולאה. כללית זה נראה כך, אך ניתן להשמיט כל אחד מארבעת החלקים.

for (INITIALIZE; TEST; STEP) {
  BODY;
}

למשל קטע הקוד הבא:

for (my $i=0; $i <= 9; $i++) {
   print "$i\n";
}

החלק INITIALIZE יבוצע פעם אחת כשההרצה תגיע לאותה נקודה.

מייד לאחר מכן יבוצע החלק TEST. אם הוא false, אז מדלגים על כל הלולאה. אם החלק TEST הוא true אז הקוד ב-BODY ומייד אחריו מבוצע החלק STEP.

להבנת משמעותם של true ו-false, קיראו את ( ערכים בוליאנים בפרל.)

אז שוב מגיע ה-TEST וחוזר חלילה, כל זמן שה-TEST מחזיר ערך כלשהו שהוא true. כך שהלולאה נראית כך:

INITIALIZE

TEST
BODY
STEP

TEST
BODY
STEP

...

TEST

foreach

ניתן לכתוב את אותה לולאה שראינו - לולאה שהולכת מ-0 עד 9, כ- לולאת foreach ונראה לי שהמשמעות היא הרבה יותר ברורה:

foreach my $i (0..9) {
  print "$i\n";
}

כפי שכתבתי, הן בעצם מילות מפתח נרדפות, ולכן יש מתכנתים שכותבים for אבל את הלולאה הם כותבים בסגנן של לולאת foreach כמו כאן:

for my $i (0..9) {
  print "$i\n";
}

החלקים בלולאת for בפרל

INITIALIZE משמש כמובן לאיתחול משתנים. חלק זה מבוצע בדיוק פעם אחת.

TEST הוא ביטוי בולאני כלשהו שבודק אם הלולאה צריכה להמשיך או להפסיק. חלק זה מבוצע לפחות פעם אחת. TEST מבוצע פעם אחת יותר מ-BODY או מ- STEP .

BODY הוא אוסף שורות קוד, לרוב זה הפעולה שאנחנו רוצים לעשות מספר פעמים. קיימים גם מקרים ש-BODY ריק עשוי להיות הגיוני. כנראה שניתן לשתב את כל האפשרויות האלו בצורה יפה יותר.

STEP הוא אוסף פעולות נוסף שמשמש להגדיל או להקטין אינדקס כלשהו. ניתן להשאיר גם את החלק הזה ריק, למשל במקרה שעושים את השינויים הנחוצים כחלק מה-BODY.

לולאה אינסופית

ניתן לכתוב לולאה אינסופית באמצעות לולאת for :

for (;;) {
  # do something
}

לולאות כאלו נכתבות לרוב כלולאות while, לדוגמה:

while (1) {
  # do something
}

לולאות אילו מתוארות במדריך בחלק לולאות while בפרל.

perldoc

תוכלו למצוא את התיאור הרשמי של לולאת for בתיעוד של פרל כאן: Perl documentation.