Perl поддерживает цикл for совершенно аналогично языку С:
for (statement1; expression; statement2)
{
statement 3;
}
Например, следующий код использует цикл for для того, чтобы вывести значения чисел от 0 до 100:
for ($digit = 0; $digit <=100; $digit++)
{
print $digit, ‘ ‘;
}
Дополнительно Perl содержит конструкцию цикла foreach , который позволяет скрипту организовывать итерации в списках и массивах. Рассмотрим пример:
@ list = (‘ a ’,’ b ’,’ c ’);
foreach $arg (@list)
{
print “List item: $arg\n”;
}
foreach $i (1..10)
{
print “iteration $i\n”
}
В первом случае цикл foreach осуществлял перебор значений в списочной переменной @ list . Во втором примере в цикле foreach осуществляется перебор чисел в диапазоне от 1 до 10.
Внутри цикла foreach может фигурировать список, состоящий из литералов, или массив, как было проиллюстрировано в предыдущем примере. После выполнения одной итерации циклом, специальная скалярная переменная {$ arg в первом случае и $ i во втором случае) принимает значение из заданного списка элементов. Область видимости этой скалярной переменной в цикле foreach ограничивается телом цикла. Поэтому скалярная переменная цикла, foreach не будет конфликтовать с идентичным именем переменной, определенной вне цикла. В следующем коде переменная с именем $i используется внутри и вне цикла foreach :
$i = 1001;
foreach $i (1..9)
{
print “$i\n”; # цикл выведет 123456789
}
print “$i\n”;
Как можно увидеть из этого примера, переменная $i, используемая для организации итераций цикла, не конфликтует с переменной $i, определенной вне цикла.
Особенностью цикла, foreach , которую ваши скрипты могут использовать, является возможность модификации элементов массива. (Будьте осторожны при реализации этой возможности!) Рассмотрим следующий цикл foreach , который добавляет значение 10 каждому элементу массива:
@list = 1..5;
foreach $i (@list)
{
$i += 10;
}
$, = ‘ ’;
print @list; # выведет 11 12 13 14 15
Сделаем несколько заключительных замечаний относительно цикла foreach . В языке Perl имена foreach и for рассматриваются как синонимы. Поэтому в скриптах можно использовать эти имена попеременно. Perl , в свою очередь, будет определять тип цикла, основываясь на его контексте.