Forum Webscript.Ru

Программирование => Perl => Тема начата: Evgeny от 11 Июня 2002, 16:08:49

Название: Простой вопрос - прервать цикл.
Отправлено: Evgeny от 11 Июня 2002, 16:08:49
Прошу прощеня за такой глупый вопрос.
Как прервать цикл
do
{
...
}
while (...);

last - это для foreach, for, while(){},
но не do {} while(); !
Раньше без этого обходился, даже не задумывался над этим.
Заранее спасибо.
Название: Простой вопрос - прервать цикл.
Отправлено: Chs от 11 Июня 2002, 17:27:02
Цитировать
last - это для foreach, for, while(){},
но не do {} while(); !

Почему?

#!/usr/bin/perl

$i = 0;

while (1)
{
print ++$i."\\n";
last;
}  

---------- Perl Run ----------
1
Normal Termination
Output completed (0 sec consumed).
Название: Простой вопрос - прервать цикл.
Отправлено: Evgeny от 11 Июня 2002, 17:49:43
Цитировать
Почему?


Я же написал do {...} while(...);

Попробуй это:



#!/usr/bin/perl

$i = 0;

do
{   print ++$i."\\n";
    last;
}  
while (1);
Название: Простой вопрос - прервать цикл.
Отправлено: YA от 11 Июня 2002, 17:50:27
Evgeny
Цитировать
Как прервать цикл
do

Вопрос некорректен: do (даже с модификатором while) не является настоящим оператором цикла и команда last в нем работать не должна. Для этого используй обычные операторы цикла (в смысле, не do) или условия.

Chs
Evgeny спрашивал не о while, а о do... while....
Название: Простой вопрос - прервать цикл.
Отправлено: от 11 Июня 2002, 17:52:20
#!/usr/bin/perl

use warnings;
use strict;

DO: {
my $i = 0;
do {
print ++$i, "\\n";
last DO if $i == 10;
} while (1);
}
Название: Простой вопрос - прервать цикл.
Отправлено: от 11 Июня 2002, 17:53:15
Так как do не является блоком, то приходиться использовать цикл с одной итерацией, то есть голый блок.
Название: Простой вопрос - прервать цикл.
Отправлено: Evgeny от 11 Июня 2002, 18:31:26
Цитировать
Так как do не является блоком, то приходиться использовать цикл с одной итерацией, то есть голый блок.

Спасибо, хотя не понятно, из каких соображений разработчики Перла решили отнести конструкцию do .. while() к не-блоку...