为什么用:w和:append打开仍会覆盖文件?

时间:2019-05-25 05:56:30

标签: string file io perl6 raku

我得到以下代码来尝试打开和写入文件(无突增):

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似乎并不影响这种行为,我想念什么?

1 个答案:

答案 0 :(得分:12)

根据open documentation,您想要

my $h = open 'somefile.txt', :a;

一字母和两字母的缩写不是修饰语,而是可以单独使用的,:w扩展为

:mode<wo>, :create, :truncate

:a扩展到

:mode<wo>, :create, :append

模仿POSIX。

您尝试过的组合:w, :append实际上也应该以附加模式打开文件-但只有在先将其截断之后,这才显得特别有用...