next M1 if $i < 3; # Переходим в начало если $i < 3

++$i; # иначе увеличиваем счетчик еще раз на 1

}

continue

{

print '$i '; # Печатаем $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 '; # Печатаем $i

}

Результат: 2 4

redo – начать новый цикл не вычисляя EXPR и не выполняя continue блок.

Пример:

M1:

while ($i < 6)

{

++$i; # Увеличиваем счетчик на 1

redo M1 if $i == 3; # Далее пропустить для $i = 3

++$i; # иначе увеличиваем счетчик еще раз на 1

}

continue {

print '$i '; # Печатаем $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, ' ';

}

print « После цикла i = $i »;

Результат:

2 3 4

После цикла i = 5

Цикл foreach.

LABEL foreach VAR (LIST) BLOCK

Переменной VAR присваивается поочередно каждый элемент списка LIST и выполняется блок. Если VAR опущенно то элементы присваиваются встроеной переменной $_. Если в теле блока изменять значение VAR то это вызовет изменение и элементов списка т.к. VAR фактически указывает на текущий элемент списка.

Вместо слова foreach можно писать просто for – это слова синонимы.

Пример:

@месяц = («январь»,'февраль','март'); # Создали массив

foreach $i (@месяц)

{

print $i,' '; # Печать $i

}

Результат: январь февраль март

Пример:

@месяц = («январь»,'февраль','март'); # Создали массив

foreach $i (@месяц)

{

$i = uc($i); # Перевели в верхний регистр

}

print @месяц;

Результат: ЯНВАРЬФЕВРАЛЬМАРТ

Пример:

for $i (3,5,7)

{

print '$i ';

}

Результат: 3 5 7

Блоки и оператор switch.

Блок не зависимо от того имеет он метку или нет семантически представляет собой цикл который выполняется один раз. Поэтому действие опраторов цикла next, last, redo – аналогично описанному выше. Блоки удобны для построения switch (переключатель) структур.

В Перл нет специального оператора switch подобного языку С поэтому вы сами можете создавать удобные для вас конструкции.

Опыт автора показывает что для простоты написания лучше всего подходит конструкция вида if ... elsif ... else ... хотя можно сочинить и нечто подобное:

SWITCH:

{

if ($i ==1 ) { .....; last SWITCH; }

if ($i ==2 ) { .....; last SWITCH; }

if ($i ==3 ) { .....; last SWITCH; }

$default = 13;

}

Выбирайте сами по своему вкусу.

Вы читаете Введение в Perl
Добавить отзыв
ВСЕ ОТЗЫВЫ О КНИГЕ В ИЗБРАННОЕ

0

Вы можете отметить интересные вам фрагменты текста, которые будут доступны по уникальной ссылке в адресной строке браузера.

Отметить Добавить цитату