Нет разницы между использованием оператора проверки файла в цикле while-true (while
) и цикла while-false (until
), или разделением теста с помощью if
/ unless
и нет разницы с чем-либо еще в Perl.
Единственный волшебный случай с циклом while - ... while <$handle>;
или while (<$handle>) {...}
, который устанавливает $_
на следующую строку, пока она определена. И на самом деле не имеет смысла использовать цикл while-false (until
) с голыми ручками.
Конструкция a until b
это просто a while not b
.
Чтобы преобразовать sleep 1 until -e $file;
в цикл while
, вы должны использовать следующее:
sleep 1 while not -e $file;
Это может быть расширено до блочной формы:
while (not -e $file) {sleep 1}
или как бесконечное while
с внутренним выходом:
while (1) {
last if -e $file;
sleep 1;
}
И все эти формы эквивалентны.
Отвечая на остальную часть вашего вопроса, большинство файловых систем должно работать с 1 секундами сна между проверками, но вы можете выбрать большее число, если процесс не ожидает срочно файла. Кроме того, если вы используете устройство с медленной файловой системой (хранящейся во флэш-памяти или через медленную сеть), вы можете также поэкспериментировать с большими значениями.
И, как показано ниже ysth
придирками, формы операторов возвращаются иначе, чем блочные формы, когда они являются последним элементом конструкции, которая возвращает: do {...}
, sub {...}
, do FILE
, eval ...