Цикл for в Perl

В языке программирования Perl есть несколько способов создать цикл. Один из способов — это использовать ключевое слово for.

Вот пример:

▶ Run
#!/usr/bin/perl

for (my $i=0; $i < 3; $i++) {
    print "$i\n";
}

Программа выведет на экран три строчки с цифрами:

0
1
2

Как работает цикл for

Цикл for в языке программирования Perl очень напоминает цикл for в языке программирования Си.

После for в скобках идет 3 фрагмента кода:

  • начальное значение
  • проверка
  • изменение

Сначала выполняется первый фрагмент кода. Потом осуществляется проверка на истину или ложь во втором фрагменте кода. Если проверка возвращает истину, то выполняется тело цикла, если же проверка возвращает ложь, то тогда цикл завершается. Если выполнялось тело цикла, то после выполнения кода в теле цикла выполняется код в третьем фрагменте, потом снова выполняется проверка и все идет дальше по уже описанному алгоритму.

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

Отсутствие значений

Интересная особенность цикла заключается в том что любой фрагмент кода в описании цикла может отсутствовать.

Вот пример цикла в описании которого не устанавливается начальное значение:

▶ Run
#!/usr/bin/perl

my $i = 0;

for (; $i < 3; $i++) {
    print "$i\n";
}

В том случае если в описании цикла for отсутствует проверка, то это создает бесконечный цикл. Вот пример цикла for в котором не указана проверка, но чтобы все-таки этот цикл завершился проверка перенесена в тело цикла и используется last.

▶ Run
#!/usr/bin/perl

for (my $i=0;; $i++) {
    last unless $i < 3;
    print "$i\n";
}

В описании цикла третий фрагмент так же может отсутствовать:

▶ Run
#!/usr/bin/perl

for (my $i=0; $i < 3;) {
    print "$i\n";
    $i++;
}

Если в цикле опустить все фрагменты, то это создаст бесконечный цикл:

#!/usr/bin/perl

for (;;) {
    print "infinity\n";
}

Видимость переменной

В том случае если переменная определена в описании цикла, то вне тела цикла эта переменная будет недоступна. В том случае если в коде есть use strict;, то подобное обращение выдаст ошибку.

▶ Run
#!/usr/bin/perl

use strict;
use warnings;

for (my $i=0; $i < 3; $i++) {
    print "$i\n";
}

print $i;
Global symbol "$i" requires explicit package name (did you forget to declare "my $i"?) at script.pl line 10.
Execution of script.pl aborted due to compilation errors.

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

▶ Run
#!/usr/bin/perl

use strict;
use warnings;

my $i = 0;

for (; $i < 3; $i++) {
    print "$i\n";
}

print $i;

next и last

В Perl есть специальные ключевые слова с помощью которых можно влиять на выполнение цикла.

Ключевое слово next прекращает выполнение текущей итерации:

▶ Run
#!/usr/bin/perl

for (my $i=0; $i < 3; $i++) {
    next if $i == 0;
    print "$i\n";
}

А с помощью last можно в любой момент завершить выполнение цикла:

▶ Run
#!/usr/bin/perl

for (my $i=0; $i < 3; $i++) {
    last if $i == 1;
    print "$i\n";
}

Связанные темы

Другие статьи