LABEL BLOCK continue BLOCK
Обратите внимание, что сложные предложения описаны в термах блоков, а не предложений, как в языке C. Поэтому необходимо использовать круглые скобки для обозначения блока.
if (EXPR) BLOCK - Вычисляется логическое выражение EXPR и если true блок выполняется.
$var =1;
if ($var == 1)
{ print $var,"\n";
}
Результат: 1
if (EXPR) BLOCK else BLOCK2 - Если EXPR=true выполняется BLOCK иначе BLOCK2.
$var =2;
if ($var == 1)
{ print "\$var = 1\n";
}
else
{ print "\$var не равно 1\n";
}
Результат: $var не равно 1
if (EXPR1) BLOCK1 elsif (EXPR2) BLOCK2 ... else BLOCK - Если EXPR1=true выполняется BLOCK1 иначе если EXPR2=true выполняется BLOCK2 иначе ... иначе BLOCK.
$var = 1;
if ($var == 0)
{ print "\$var = 0\n";
}
elsif ($var == 1)
{ print "\$var = 1\n";
}
else
{ print "Не известное \$var\n";
}
Результат: $var = 1
Цикл While. Выполняет BLOCK до тех пор пока EXPR = true. Метка LABEL не обязательна и состоит из идентификатора, завершающегося символом ':'. Метка необходима при использовании внутри блока цикла управляющих операторов next, last и redo. Если метка отсутствует, то эти операторы ссылаются к началу ближайшего цикла. Блок после continue выполняется всегда перед тем, как вычисляется логическое выражение EXPR. Это подобно EXPR3 в предложении for, поэтому в этом блоке удобно изменять счетчики и флаги цикла, даже если применяется оператор next.
Операторы управления циклом.next - подобен continue в С. Переходит к началу текущего цикла, т.е. повторяет итерацию.
M1:
while ($i < 6)
{
++$i; # Увеличиваем счетчик на 1
next M1 if $i < 3; # Переходим в начало если $i < 3
++$i; # иначе увеличиваем счетчик еще раз на 1
}
continue
{
print "$i "; # Результат: 1 2 4 6
}
last - подобен оператору break в языке С. Немедленно прерывает цикл. Блок continue пропускается.
M1:
while ($i < 6)
{
++$i; # Увеличиваем счетчик на 1
last M1 if $i > 3; # Выход из цикла если $i > 3
++$i; # иначе увеличиваем счетчик еще раз на 1
}
continue {
print "$i "; # Результат: 2 4
}
redo - начать новый цикл, не вычисляя EXPR и не выполняя continue блок.
M1:
while ($i < 6)
{
++$i; # Увеличиваем счетчик на 1
redo M1 if $i == 3; # Далее пропустить для $i = 3
++$i; # иначе увеличиваем счетчик еще раз на 1
}
continue {
print "$i "; # Результат: 2 5 7
}
Цикл for. LABEL for (EXPR1; EXPR2; EXPR3) BLOCK. Оператор for полностью аналогичен оператору for в С. Перед началом цикла выполняется EXPR1, если EXPR2 = true выполняется блок, затем выполняется EXPR3.
for ($i = 2; $i < 5; ++$i){
print $i, " "; # Результат: 2 3 4
}
print "\nПосле цикла i = $i\n"; # После цикла i = 5
Цикл foreach. LABEL foreach VAR (LIST) BLOCK. Переменной VAR присваивается поочередно каждый элемент списка LIST и выполняется блок. Если VAR опущено, то элементы присваиваются встроенной переменной $_. Если в теле блока изменять значение VAR то это вызовет изменение и элементов списка т.к. VAR фактически указывает на текущий элемент списка. Вместо слова foreach можно писать просто for - это слова синонимы.
@month = ("январь","февраль","март"); # Создали массив
foreach $i (@month)
{ print $i," "; # Результат: январь февраль март
}
foreach $i (@month)
{ $i = uc($i); # Перевели в верхний регистр
}
print @ month; # Результат: ЯНВАРЬФЕВРАЛЬМАРТ
for $i (3,5,7)
{ print "$i "; # Результат: 3 5 7
}
Дата добавления: 2015-11-04; просмотров: 715;