Чтение онлайн

на главную

Жанры

Шрифт:

M1:

while ($i < 6)

{

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

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 «\nПосле цикла i = $i\n»;

Результат:

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;

}

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

Оператор goto.

В Перл существует оператор goto хотя где , как и когда его применять как говорил Ходжа Насредин «Тонкий филосовский вопрос».

Для начинающих программистов которым от так «нужен» я бы вообще посоветовал «забыть» о его существовании. Однако при создании больших производственных задач на последнем этапе особенно при отработке «отвальных» ошибочных ситуаций конечно goto нужен.

В Перл реализовано три формы goto. goto – метка, goto – выражение и goto – подпрограмма.

goto – метка выполняет непосредственный переход на указанную метку.

goto – выражение – Вычисляет имя метки и делает соответсвующий переход.

Например если мы хотим сделать переход на одну из трех меток "M1:", "M2:" или "M3:" в зависимости от значений переменной $i равной 0, 1 или 2 то это лучше сделать следующим образом:

Поделиться:
Популярные книги

Вечная Война. Книга VIII

Винокуров Юрий
8. Вечная Война
Фантастика:
боевая фантастика
юмористическая фантастика
космическая фантастика
7.09
рейтинг книги
Вечная Война. Книга VIII

Идеальный мир для Лекаря 16

Сапфир Олег
16. Лекарь
Фантастика:
боевая фантастика
юмористическая фантастика
аниме
5.00
рейтинг книги
Идеальный мир для Лекаря 16

Отмороженный

Гарцевич Евгений Александрович
1. Отмороженный
Фантастика:
боевая фантастика
рпг
5.00
рейтинг книги
Отмороженный

Сфирот

Прокофьев Роман Юрьевич
8. Стеллар
Фантастика:
боевая фантастика
рпг
6.92
рейтинг книги
Сфирот

Снегурка для опера Морозова

Бигси Анна
4. Опасная работа
Любовные романы:
современные любовные романы
5.00
рейтинг книги
Снегурка для опера Морозова

Волк: лихие 90-е

Киров Никита
1. Волков
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Волк: лихие 90-е

Газлайтер. Том 8

Володин Григорий
8. История Телепата
Фантастика:
попаданцы
альтернативная история
аниме
5.00
рейтинг книги
Газлайтер. Том 8

Враг из прошлого тысячелетия

Еслер Андрей
4. Соприкосновение миров
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Враг из прошлого тысячелетия

Кодекс Охотника. Книга XVII

Винокуров Юрий
17. Кодекс Охотника
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Кодекс Охотника. Книга XVII

Неудержимый. Книга XVIII

Боярский Андрей
18. Неудержимый
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Неудержимый. Книга XVIII

Диверсант

Вайс Александр
2. Фронтир
Фантастика:
боевая фантастика
космическая фантастика
5.00
рейтинг книги
Диверсант

Королевская Академия Магии. Неестественный Отбор

Самсонова Наталья
Любовные романы:
любовно-фантастические романы
8.22
рейтинг книги
Королевская Академия Магии. Неестественный Отбор

Неудержимый. Книга XI

Боярский Андрей
11. Неудержимый
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Неудержимый. Книга XI

Бестужев. Служба Государевой Безопасности. Книга вторая

Измайлов Сергей
2. Граф Бестужев
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Бестужев. Служба Государевой Безопасности. Книга вторая