В этой части Учебника Perl мы поговорим о цикле for в Perl. Кое-кто называет его цикл for в стиле C, но на самом деле такая конструкция присутствует во многих языках.

Цикл for в Perl

Ключевое слово for в Perl может работать двумя разными способами. Один из них повторяет делает то же самое, что и цикл foreach, а второй работает как цикл for в стиле C, с тремя частями. Он называется «в стиле C», хотя такое есть во многих языках.

Я опишу, как это работает, хотя лично я предпочитаю использовать цикл foreach, как описано в разделе о массивах perl.

Ключевые слова for и foreach могут использоваться как синонимы. Perl поймет, что вы имели в виду.

Управляющая часть цикла for в стиле C состоит из трех частей. В общем случае цикл выглядит так, но в принципе любую из четырх составляющих можно опустить.

for (ИНИЦИАЛИЗАЦИЯ; ПРОВЕРКА; ШАГ) {
  ТЕЛО;
}

В качестве примера взгляните на этот код:

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

ИНИЦИАЛИЗАЦИЯ выполняется один раз, когда ход программы достигает цикла.

Сразу после этого выполняется ПРОВЕРКА. Если результат выполнения ложный, весь цикл пропускается. Если ПРОВЕРКА показывает истину, выполняется ТЕЛО, а затем ШАГ.

(Чтобы узнать, что подразумевается под истиной и ложью, обратитесь к статье о булевых значениях в Perl.)

Затем ПРОВЕРКА выполняется снова и снова, до тех пор, пока ее результат остается истинным. Так что это может выглядеть примерно так:

ИНИЦИАЛИЗАЦИЯ

ПРОВЕРКА
ТЕЛО
ШАГ

ПРОВЕРКА
ТЕЛО
ШАГ

...

ПРОВЕРКА

foreach

Цикл, описанный выше можно также записать в форме цикла foreach, и в таком случае, мне кажется, код выглядит намного яснее:

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

Как уже упоминалось, эти два ключевых слова являются синонимами, так что некоторые используют for в циклах foreach, например так:

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

Части цикла for в perl

ИНИЦИАЛИЗАЦИЯ нужна, очевидно, для инициализации некой переменной. Она выполняется лишь однажды.

ПРОВЕРКА это некое логическое выражение, в котором проверяется, нужно ли закончить цикл или продолжать его. Она выполняется как минимум однажды. ПРОВЕРКА выполняется на один раз больше, чем ТЕЛО и ШАГ.

ТЕЛО это набор выражений, как правило таких, которые должны выполниться несколько раз, хотя в некоторых случаях может быть уместно использование пустого блока в качестве ТЕЛА. Впрочем, наверное все эти случаи можно переписать лучшим способом.

ШАГ это еще одно действие, обычно используемое, чтобы увеличить или уменьшить некий индекс. Его тоже можно оставить пустым, если, например, это изменение уже делается в ТЕЛЕ.

Бесконечный цикл

С помощью цикла for можно написать бесконечный цикл:

for (;;) {
  # сделать что-нибудь
}

Обычно его пишут с помощью while:

while (1) {
  # сделать что-нибудь
}

Этот прием описан в главе о цикле while в perl.

perldoc

Официальное описание цикла for можно почитать в разделе perlsyn документации Perl.