Составные операторы
if (EXPR) BLOCK
if (EXPR) BLOCK else BLOCK
if (EXPR) BLOCK eslif (EXPR) BLOCK else BLOCK
LABEL: while (EXPR) BLOCK
LABEL: while (EXPR) BLOCK continue BLOCK
LABEL: for (EXPR; EXPR; EXPR;...) BLOCK
LABEL: foreach VAR(LIST) BLOCK
LABEL: BLOCK continue BLOCK
В отличие от C и Pascal все определяется в терминах блоков, а не операторов:
то есть фигурные скобки являются обязательными.
Метка состоит из идентификатора и двоеточия. Она ставится в начале цикла и
служит указателем для операторов цикла next, last и redo (их описание смотри
ниже). Если это continue блок, то он выполняется перед тем, как условие будет
проверено снова, как третья часть for оператора в C. Правильность условия
может зависеть от результатов выполнения блока, например:
$i = 1;
while ($i < 10){
...
} continue {
$i++;
}
или, что тоже самое:
for ($i = 1; $i < 10; $i++;) {
...
}
Foreach цикл присваивает переменной по очереди каждое значение из списка и выполняет над ней все команды из блока. Переменная является локальной и существует только в пределах данного цикла. Если список является массивом, то его
можно изменять в цикле, посредством операций над переменной. Если переменная
опускается, то по умолчанию в качестве нее используется $_.
foreach \$elem(@elements) \{\$elem = \$elem * 2;\}
-- цикл по всему содержимому
массива @items.
Пример:
for ((1,2,3,4,5,6,7,8,9,10,'boom')) {
print $_,"\n"; sleep(1); }
for (1..15) { print "Merry Christmas\n"; }
foreach $item (split(/[\/\*\\n]/,$ENV{'TERMCAP'})) {
print "Item: $item\n"; }
Блок семантически эквивалентен циклу, который исполняется один раз. Поэтому в
него можно включать операторы контроля цикла, чтобы выйти из него или запустить
его еще раз.