În partea aceasta a Tutorialului Perl vom vorbi despre bucla for în Perl. Unii o mai numesc bucla for în stil C, deşi această construcţie este de fapt disponibilă în mai multe limbaje.

for în Perl

Cuvântul cheie for în Perl poate funcţiona în două moduri diferite: poate funcţiona la fel ca o buclă foreach sau poate să se comporte ca o buclă for din 3 părţi în stil C. E numită în stil C cu toate că e disponibilă în multe limbaje.

Voi descrie cum funcţionează aceasta deşi prefer să scriu bucla în stil foreach, aşa cum este descrisă în secţiunea despre vectori Perl.

Cele două cuvinte cheie for şi foreach sunt sinonime. Perl va descifra singur la care dintre semnificaţii vă referiţi.

Bucla for în stil C are trei părţi în secţiunea de comandă. În general arată ca şi codul acesta, deşi puteţi omite oricare dintre cele 4 părţi.

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

Vezi acest cod drept exemplu:

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

Partea INITIALIZE va fi executată odată ce execuţia ajunge în acel punct.

Apoi, imediat după aceea va fi executată partea TEST. Dacă aceasta este falsă, atunci se sare peste toată bucla. Dacă partea TEST este adevărată atunci este executată partea BODY, urmată de partea STEP.

(Pentru semnificaţia reală a valorilor ADEVĂRAT sau FALS, vezi valori logice în Perl.)

Apoi urmează din nou TEST şi tot aşa, atâta timp cât TEST se execută cu valoare de adevăr. Deci arată aşa:

INITIALIZE

TEST
BODY
STEP

TEST
BODY
STEP

...

TEST

foreach

Bucla de mai sus este parcursă de la 0 la 9 şi poate fi scrisă ca o buclă foreach, intenţia fiind probabil mult mai clară:

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

Aşa cum sunt scrise, cele două bucle sunt de fapt echivalente. Unii oameni folosesc cuvântul cheie for însă scriu o buclă în stil foreach ca aceasta:

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

Părţile buclei for în Perl

INITIALIZE iniţializează o varibilă. Este executată exact odată.

TEST este o expresie logică oarecare şi verifică dacă bucla for trebuie să se oprească sau să continue. Este executată cel puţin odată. Odată ce BODY şi STEP au fost executate, TEST mai este executată încă odată. Probabil că toate aceste studii de caz pot fi rescrise într-un mod mai atrăgător.

STEP este o altă instrucţiune folosită în mod normal pentru a incrementa sau decrementa un fel de index. Aceasta poate fi lăsată necompletată dacă de exemplu facem acest lucru în interiorul BODY.

Infinite loop

Puteţi compune un ciclu infinit folosind bucla for:

for (;;) {
  # fă ceva
}

Lumea îl scrie de obicei folosind o instrucţiune while cum ar fi:

while (1) {
  # fă ceva
}

Este descrisă în partea despre bucla while în Perl.

perldoc

Puteţi găsi descrierea oficială a buclei for în secţiunea perlsyn a documentaţiei Perl.