【发布时间】:2019-10-11 14:51:20
【问题描述】:
我得到以下代码来尝试文件打开和写入(没有冲刺):
sub MAIN {
my $h = open 'somefile.txt', :w, :a;
for 1..4 {
$fh.put: "hello";
}
$fh.close;
}
我所期望的是,每次运行时,它应该在文件中附加 4 行带有“hello”的附加行。但是它似乎仍然会覆盖文件,经过 2 次或更多次运行后仍然只有 4 行。
$ perl6 opening.p6
$ cat somefile.txt
hello
hello
hello
hello
$ perl6 opening.p6
$ cat somefile.txt
hello
hello
hello
hello
添加或删除 :a 或 :append 似乎不会影响这种行为,我错过了什么?
【问题讨论】:
-
仅使用 :a 另见open
-
这本质上是How do you append to a file in Perl 6? 的副本,所以答案基本上是一样的。 Aiui,除非您确切地知道自己在做什么并且对可能导致宇宙内爆的事情负责,正如刚刚链接的 Valle 文档中所解释的那样,您应该只使用 8 种模式中的 一种
:r, @ 987654328@、:a、:x、:update、:rw、:ra或:rx在任何给定的open呼叫中。你不应该把它们结合起来。您不应该使用其他模式。 -
@raiph 在使用有问题的模式标志组合时是否应该发出警告?
-
@ChristopherBottoms 我无法用我想在一个 SO 评论空间中提供的细微差别来回答这个问题。 (如果您或其他人已经打开了关于此的 GH 问题,请链接到它,我会在那里正确评论。)过度简化......警告可能是有意义的。但是,如果我要考虑这样的事情,我也会考虑强制这 8 种模式只能单独使用,而不是与任何其他模式结合使用,如果它们结合使用将是致命的。如果人们想要组合,那么他们将不得不使用 other 模式。 (如果在不受支持的组合中使用,它们可能仍会发出警告。)