沖洗輸出我在Perl以下兩行:可以強制Perl
print "Warning: this will overwrite existing files. Continue? [y/N]: \n";
my $input = <STDIN>;
的問題是,Perl腳本暫停輸入之前打印線沒有得到執行。也就是說,perl腳本似乎無限期停止,原因不明。我猜測輸出是以某種方式緩衝的(這就是爲什麼我把\ n放入,但似乎沒有幫助)。我對perl相當陌生,所以如果能解決這個問題,我將不勝感激。
沖洗輸出我在Perl以下兩行:可以強制Perl
print "Warning: this will overwrite existing files. Continue? [y/N]: \n";
my $input = <STDIN>;
的問題是,Perl腳本暫停輸入之前打印線沒有得到執行。也就是說,perl腳本似乎無限期停止,原因不明。我猜測輸出是以某種方式緩衝的(這就是爲什麼我把\ n放入,但似乎沒有幫助)。我對perl相當陌生,所以如果能解決這個問題,我將不勝感激。
默認情況下,STDOUT在連接到終端時進行行緩衝(由LF刷新),而在連接到除終端以外的其他設備時進行塊緩衝(在緩衝區滿時刷新)。此外,<STDIN>
在連接到終端時會刷新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 after every print.
$| = 1;
有幾種方法可以打開自動沖洗:在開始
$|++;
,或者也有BEGIN
塊:
BEGIN{ $| = 1; }
然而,這似乎是不尋常的東西與你的配置,因爲通常一個\n
在最後觸發沖洗(至少是終端)。
這是一個很好的答案,注意你也可以爲特定的句柄設置autoflush'STDERR-> autoflush(1);' – andlrc