次の Perl コードがあります。
STDOUT->autoflush(1);
foreach(...)
{
...
foreach(...)
{
print("Processing $folder");
$|=1;
process($folder);
}
...
}
ただし、print ステートメントはループの最初の繰り返しでのみ機能し、その後は何も出力しません。理由はありますか?
編集:理由を見つけて、回答にも追加しました。解決策は次のとおりです。
ループ内に次の行を追加したところ、機能しました。
STDOUT を選択します。
process() 関数のコードは、デフォルトの出力バッファを変更するべきだったと思います。それは他の誰かによって書かれたコードでした!
これがこれを許可する Perl の問題なのか、それともデフォルトに戻さなかった開発者の問題なのかはわかりません。
最終的なコードは次のようになります。
foreach(...) { ... foreach(...) { select STDOUT; print("Processing $folder"); $|=1; process($folder); } ... }
皆さんありがとう...