如何自动刷新Perl 6文件?

bri*_*foy 5 io perl6 autoflush

在Parrot时代,Perl 6有几个答案,它们目前似乎不起作用:

这是基于MoarVM版本2017.04-53-g66c6dda实现Perl 6.c的Rakudo版本2017.04.3.

perl6的答案默认启用"autoflush"吗?说它默认启用(但那是2011年).

这是我正在玩的一个程序:

$*ERR.say: "1. This is an error";
$*OUT.say: "2. This is standard out";
Run Code Online (Sandbox Code Playgroud)

它的输出,这是一个不幸的顺序:

2. This is standard out
1. This is an error
Run Code Online (Sandbox Code Playgroud)

所以也许我需要打开它.我怎么能禁用autoflush?提到了一种autoflush方法:

$*ERR.autoflush = True;
$*ERR.say: "1. This is an error";
$*OUT.say: "2. This is standard out";
Run Code Online (Sandbox Code Playgroud)

但这不起作用:

对于'IO :: Handle'类型的调用者,没有这样的方法'autoflush'

我想我可以通过让我的IO类在每次输出后刷新来自行伪造.对于它的价值而言,缺少这一功能使我无法使用Perl 6来完成今天的特定任务.

作为第二个问题,为什么Perl 6现在没有这个,特别是当它看起来像以前一样?你怎么会说Perl 5人这不是问题?

tim*_*imo 6

最近有一个输出重构.使用我当地版本的rakudo,我不能让它再给错误的订单(2017.06-173-ga209082 built on MoarVM version 2017.06-48-g4bc916e)

现在有一个:bufferio句柄的参数,你可以设置一个数字(或传递给它:!buffer)来控制它.

如果输出isatty不是缓冲区,我假设默认值.


msc*_*cha 4

当您提出问题时,这可能尚未起作用,但是:

$*ERR.out-buffer = False;
$*ERR.say: "1. This is an error";
$*OUT.say: "2. This is standard out";
Run Code Online (Sandbox Code Playgroud)

有点难找,但这里有记录。

在 Rakudo Star 2017.10 中为我工作。

  • 当输出被重定向或通过管道传输时(例如“2>&1 | less”),将“$*ERR.out-buffer”和“$*OUT.out-buffer”设置为“False”仍然有用。 (2认同)