Шаг 5 - Циклы

. Как и в других языках программирования в перле имеется несколько видов циклов. В этом шаге будет рассматриваться их синтаксис.

Оператор цикла For.

Цикл for выполняется определенное количество раз. Оператор for очень похож на for в С++. Синтаксис его таков:
for (expression_1; expression_2; expression_3)
{ ::.. }
Где:
  • expression_1 - задаёт стартовое значение счетчика,
  • expression_2 - условие, при котором цикл продолжает работать,
  • expression_3 - задает шаг, по которому прибавляется счетчик.
Выражения в цикле разделены точкой c запятой. Давайте рассмотрим пример:
for( $fr = 0 ;  $fr < 3 ;  ++$fr )
{
      print "->$fr<-/n";
}
Результат будет выглядеть так:
->0<-
->1<-
->2<-
Здесь expression_1 заменено на $fr = 0, как вы видите счетчиком, здесь служит скаляр $fr и ему присваивается начальное значение 0. Этот цикл будет работать пока выражение $fr < 3 будет выполнятся, если же нет, то он прервется. Шаг, с которым будет увеличиваться цикл, равен единице, это следует из выражения ++$fr (обратите внимание оператор ++ - инкремент, а также -- -декремент пишется перед переменной), которое можно заменить на более понятное $fr = $fr + 1;

Оператор цикла foreach.

В этом цикле переменной поочередно присваивается каждый элемент массива.

Синтаксис:

foreach VAR ( ARRAY )
{------------}
Пример:
@array = ("one","two","three");
foreach $var (@array)
{
     print "@var : ";
}
Результат:
 one : two : three 
Как видно из примера здесь каждое значение массива @array присваивается переменной $var. Можно также записать в таком виде:
foreach $var ("one","two","three")
{ ------- }

Цикл "пока", оператор while.

Это цикл работает, "пока" условие выполняется.

Синтаксис:

write (_EXP_)
{ ----------- }
Здесь _EXP_, условие, при котором цикл будет работать.

Пример:

$wr = 0;
write ( $wr < 6 )
{     print "->$wr<-\n";
       $wr = $wr + 2;
}
Результат будет такой:
->0<-
->2<-
->4<-
Обратите внимание, что в цикле переменная $wr изменяется, если же она не будет изменяться, то цикл будет работать бесконечно но, слава богу, в юниксе есть такая команда как KILL, или сочетание клавиш Ctrl + C (это на случай если он у вас все-таки повис).

Если у вас в цикле должен повторяться только один оператор, то можно записать, к примеру, так:

++$var ( $var < 5 );
Оператор print пишется перед оператором цикла.

Существуют так же операторы управления циклом while:

  • next метка - переходит в начало текущего цикла.
  • last метка - прерывает цикл.
  • redo метка - начинает новый цикл не вычисляя выражения.

Цикл "до", оператор until.

Этот цикл противоположен циклу while, то есть он выполняется, пока условие не выполняется.
$wr = 0;
until ( $wr > 6 )
{     print "->$wr<-\n";
       $wr = $wr + 2;
}

Оператор goto.

Этот оператор позволяет осуществить переход на указанное место. Поскольку я приверженец структурного программирования, то я советую не употреблять этот оператор в своих программах. Хотя в принципе он может понадобиться в некоторых случаях.

Формат следующий:

  метка:
   ....
   goto метка;
Можно сделать переход к подпрограммам. Хотя подпрограммы мы будем рассматривать в следующих шагах, мы все-таки напишем его синтаксис:
  goto $subroutine;


Предыдущий Шаг | Следующий Шаг | Оглавление

By Vasya Vazhesov.