while
while-true()ループとwhile-false( )ループでファイルテスト演算子を使用すること、またはテストを/でuntil
区切ることによって違いはありません。また、Perlの他のものとの違いもありません。if
unless
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
以下の落とし穴として、一般に、ステートメントフォームは、ブロックフォームが次を返す構造の最後の要素である場合、ブロックフォームとは異なる方法で返されます:、、、eval do {...}
.. ..sub {...}
do FILE