有一對夫婦對Perl 6放回鸚鵡天的答案,他們似乎並不目前的工作:如何自動刷新Perl 6 filehande?
這是Rakudo版2017年4月3日建MoarVM版本2017.04-53-g66c6dda 實施Perl 6.c.
對Does perl6 enable 「autoflush」 by default?的回答表示默認情況下啓用了它(但那是2011)。
這裏有一個程序,我用打:
$*ERR.say: "1. This is an error";
$*OUT.say: "2. This is standard out";
而它的輸出,這是一個不幸的順序:
2. This is standard out
1. This is an error
所以,也許我需要打開它。有How could I disable autoflush?,其中提到一個autoflush
方法:
$*ERR.autoflush = True;
$*ERR.say: "1. This is an error";
$*OUT.say: "2. This is standard out";
但是,這並不工作:
沒有這樣的方法, '自動沖洗' 類型的調用者 'IO ::句柄'
我想我可以通過使我的IO類在每次輸出後刷新來自己僞造。對於它的價值,缺少這個特性使我無法使用Perl 6來完成當前的特定任務。
作爲第二個問題,爲什麼現在沒有Perl 6,特別是當它看起來像它曾經擁有它?你會怎樣剝奪Perl 5這個人不是問題?
FWIW TTY手柄沒有被緩衝,因此不需要進行設置。 OP觀察到的行爲歸因於2017年4月仍然使用libuv的異步IO進行輸出。 –
當您的輸出被重定向或管道輸入時(例如'2>&1 | less'),將'$ * ERR.out-buffer'和'$ * OUT.out-buffer'設置爲'False'仍然有用。 – mscha