[解決済み] Perlで強制的にフラッシュ出力することはできますか?
2022-02-08 03:03:57
質問
Perlで以下の2行があります。
print "Warning: this will overwrite existing files. Continue? [y/N]: \n";
my $input = <STDIN>;
問題は、Perl スクリプトが入力のために一時停止する前に、print 行が実行されないことです。つまり、Perlスクリプトは明確な理由もなく無期限に停止するようです。私は、出力が何らかの形でバッファリングされていると推測しています(そのため、"the \n" を入れましたが、それは助けにならないようです)。
解決方法は?
STDOUTは、デフォルトでは、ターミナルに接続した場合はラインバッファ(LFでフラッシュ)、ターミナル以外に接続した場合はブロックバッファ(バッファが一杯になったらフラッシュ)になっています。さらに
<STDIN>
は、端末に接続されたときにSTDOUTをフラッシュします。
これはつまり
- STDOUTがターミナルに接続されていない。
- STDOUTにプリントしていない、または
- STDOUTがいじられている。
print
を現在表示しています。
select
ハンドルが提供されない場合、編集されたハンドルが提供されるので、以下は上記のいずれが真であっても動作します。
# Execute after the print.
# Flush the currently selected handle.
# Needs "use IO::Handle;" in older versions of Perl.
select()->flush();
または
# Execute anytime before the <STDIN>.
# Causes the currently selected handle to be flushed immediately and after every print.
$| = 1;
関連
-
Perlのprint、printf、sprintfの使用例について説明します。
-
Perlの1行コメントと複数行コメントの構文
-
Perl5 のコードを Perl6 に移行するためのソリューション
-
Windowsにperlとkomodo IDEをインストールする詳細な手順
-
2つのファイルを比較し、データをフィルタリングするスクリプトコード(perlで実装されている
-
へのコメント Perl code for marriage proposal
-
Perl拡張の正規表現コード解析
-
[解決済み] print関数の出力をフラッシュする(pythonの出力をバッファリング解除する)にはどうすればよいですか?
-
[解決済み] Perlからロケール設定の警告を修正する方法
-
[解決済み] printfは、フォーマット文字列の中に改行がないと、呼び出し後にフラッシュしないのはなぜですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン