На этом шаге мы начнем знакомиться с операторами цикла.
Цикл while предназначен для повторного вычисления блока операторов, пока остается истинным заданное в нём выражение-условие. Его общий синтаксис имеет две формы:
[МЕТКА:] while (<ВЫРАЖЕНИЕ>) <БЛОК> [МЕТКА:] while (<ВЫРАЖЕНИЕ>) <БЛОК> continue <БЛОК1>
Все операторы цикла могут быть снабжены не обязательными метками. В Perl метка представляет правильный идентификатор, завершающийся двоеточием. Пример:
$i = 1; while ($i<=3) { $a[$i] = 1/$i; # Присвоить значение элементу массива. ++$i; } print “Переменная цикла \$i = $i\n”; # $i = 4 print “Массив \@a: @a\n”; # @a = (1, 0.5, 0.333333333333)
Вместо ключевого слова while можно использовать ключевое слово until. В этом случае управляющая конструкция называется циклом until, который отличается от цикла while тем, что его тело выполняется, только если проверяемое условие ложно. Пример:
$i = 1; until ($i > 3) { $a[$i] = 1/$i; # Присвоить значение элементу массива. ++$i; } print “Переменная цикла \$i = $i\n”; # $i = 4 print “Массив \@a: @a\n”; # @a = (1, 0.5, 0.333333333333)
Блок операторов БЛОК1, задаваемый после ключевого слова continue, выполняется всякий раз, когда осуществляется переход на выполнение новой итерации. Это происходит после выполнения последнего оператора тела цикла или при явном переходе на следующую итерацию цикла командой next. Блок continue на практике используется редко, но с его помощью можно строго определить цикл for через оператор цикла while.
Следующий пример демонстрирует использование цикла while для вычисления степеней двойки не выше шестнадцатой. В этом примере оператор цикла while функционально эквивалентен циклу for. Блок continue выполняется всякий раз по завершении очередной итерации цикла, увеличивая переменную $i на единицу. Он эквивалентен выражению увеличения/уменьшения оператора for.
# Вычисление степеней числа 2. $i = 1; while ($i <= 16) { print "2 в степени $i: ", 2**$i, "\n"; } continue { ++$i; # Увеличение переменной $i } # перед выполнением следующей итерации.
На следующем шаге мы продолжим изучение циклических конструкций.