如何自动刷新Perl 6文件?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何自动刷新Perl 6文件?相关的知识,希望对你有一定的参考价值。

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

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

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 :: Handle'类型的调用者,没有这样的方法'autoflush'

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

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

答案

当您提出问题时,这可能还没有奏效,但是:

$*ERR.out-buffer = False;
$*ERR.say: "1. This is an error";
$*OUT.say: "2. This is standard out";

这有点难以找到,但它记录了here

在Rakudo Star 2017.10中为我工作。

另一答案

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

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

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

另一答案

Rakudo不支持autoflush(尚)。在5to6-perlvar条目下的$OUTPUT_AUTOFLUSH有一张纸条。

raiph在其他地方发布了一条评论,其中#perl6 IRC log search显示人们不断推荐autoflush,其他一些人一直说它没有实施。由于它不是一个记录的方法(虽然flush是),我想我们将不得不生活。

另一答案

如果您主要对STDOUT和STDERR感兴趣,以下似乎重新打开它们而不进行缓冲(自动刷新):

$*OUT = $*OUT.open(:!buffer);
$*ERR = $*ERR.open(:!buffer);

这还没有经过彻底的测试,我很惊讶这是有效的。这是一个有趣的API,可让您重新打开一个开放的流。

以上是关于如何自动刷新Perl 6文件?的主要内容,如果未能解决你的问题,请参考以下文章

如何有条件地将 C 代码片段编译到我的 Perl 模块?

Perl CGI 日期和时间选择器,自动填充当前日期和时间

mac下perl怎么刷文件?

如何刷新 FragmentPagerAdapter 的片段?

如何自动刷新网页?

如何刷新片段'onResume?