有一对夫妇对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