Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
perl.doc
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
388.1 Кб
Скачать

Цикл until

Еще одной конструкцией цикла в языке Perl является циклuntil, который является противоположностью циклу while. Как выпомните, в цикле while инструкции выполняются до тех пор, покавыполняется заданное условие. В цикле until, напротив, инструкции выполняются до тех пор, пока не будет выполнено условие. Например, рассмотрим цикл while, такой, как показан на следующейстранице.

while (!(expr))

{

statement;

}

Используя цикл until, можно создать идентичный цикл, показанный ниже:

until (expr)

{

statement;

}

Аналогичным образом следующая конструкция do while использует оператор логического отрицания для того, чтобы выполнять цикл, пока заданное булево выражение не станет истинным:

do {

statement;

} while (!(expr));

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

do

{

statement;

} until (expr);

Циклы for и foreach

Perl поддерживает цикл for совершенно аналогично языку С:

for (statement1; expression; statement2)

{

statement3;

}

Например, следующий код использует цикл 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, в свою очередь, будет определять тип цикла, основываясь на его контексте.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]