אתה נמצא כאן תויות לבלוקים - המשך

התוית שנבחרה תשב ממש לפני ההצהרה שמכילה את הבלוק במבנה הבא:

SOME_LABLE: while (something)
{
do_1;
do_2;
do_3;
if (condition)
     {
     do_4;
     do_5;
     last SOME_LABLE;
     } # סיום התנאי
do_6;
do_7;
} # סוף הלולאה
# יצא לכאן last

כאן SOMELABEL נוסף כפרמטר ל last.
פרמטר זה אומר לפרל לצאת מהבלוק SOMELABEL ולא רק מהבלוק הפנימי ביותר.
במקרה זה אין לנו שום דבר אחר פרט לבלוק הפנימי ביותר.
להלן מקרה של לולאה מקוננת:

OUTER: for ($i=1; $i <= 10; $i++)
{
INNER: for ($j=1; $j <= 10; $j++)
     {
     if ($i*$j == 63)
         {
         print "$i times $j is 63! \n";
         last OUTER;
         }
     if ($j >= $i)
         {
         next OUTER; # OUTER מעבר לאיטרציה הבאה בתוך
         }
     } # INNER סוף
} # OUTER סוף
# יצא לכאן last

סט הצהרות זה מנסה ערכי הצלחה של שני מספרים קטנים המוכפלים אחד בשני, עד אשר נמצא זוג שתוצאתו היא 63 ( 7 ו 9 ). ברגע שהזוג נמצא, אין טעם להמשיך ולבדוק מספרים אחרים ולכן ה- if יוציא אותנו מלולאת ה for בעזרת last ותוית. ה- if השני מנסה לוודא כי המספר הגדול מבין שני המספרים יהיה תמיד המספר הראשון, זאת בעזרת קפיצה לאטרציה הבאה של הלולאה החיצונית מייד כשהתנאי כבר לא תופס יותר. המספרים שייבחנו עם (i,$j$) יהיו הזוגות הבאים:
(1,1)(2,1)(2,2)(3,1)(3,2)(3,3)(4,1) וכן הלאה...
ה last , ה next וה redo ללא הפרמטר האופציונלי של התוית, יתפקדו כרגיל תוך התחשבות בבלוק הפנימי ביותר גם אם הבלוק הפנימי ביותר הוא עם תוית.









להוספת תגובה, אנא התחברו לדרכונט.