一方、偽(until
)ループ対、又はif
/unless
でテストを分離しながら、真(while
)のファイルテスト演算子を使用しての間に違いはありません、またとの違いがありますPerlの何か。
whileループの魔法の唯一のケースは、... while <$handle>;
またはwhile (<$handle>) {...}
であり、定義中に$_
を次の行に設定します。また、間違った(until
)ループを素手で使用することは実際には意味がありません。
a until b
の構成は、単にa while not b
です。次を使用し、while
ループにsleep 1 until -e $file;
を変換するには
:
sleep 1 while not -e $file;
これは、ブロックの形に拡張することができます。
while (not -e $file) {sleep 1}
または内部エスケープと無限while
として:
while (1) {
last if -e $file;
sleep 1;
}
これらの形式はすべて同等です。
残りの質問に答えると、ほとんどのファイルシステムはチェック間で1秒のスリープで正常に動作するはずですが、プロセスが緊急にファイルを待っていない場合は、多くの方法で多くの方法を選択できます。また、ファイルシステムが遅いデバイス(フラッシュメモリや低速ネットワーク経由で保存されているデバイス)を使用している場合は、大きな値を試してみることもできます。
そして、彼らは返す構造体の最後の要素ある場合は、以下のysth
nitpicksとして、一般的には、ステートメントの形式が異なり、ブロックフォームより戻る:do {...}
を、sub {...}
、do FILE
、evalを...
パフォーマンス?ここでの唯一のペナルティは、ファイルシステムにpingを実行することです。これは、どのループよりも大きなペナルティのオーダです。 – Drakosha
@Drakosha:典型的なファイルpingがどれくらいの時間かかると思いますか?遅れに対処するには1秒間の睡眠で十分ではありませんか? – Zaid
はい、通常のファイルシステム/ストレージに十分な時間がかかるようです。ループ性能をチェックしている理由は分かりませんでしたが、ここではごくわずかです。 – Drakosha