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

Jes*_*wak 9 string io file perl6 raku

我得到以下代码来尝试打开和写入文件(不加急):

sub MAIN {
    my $h = open 'somefile.txt', :w, :a;

    for 1..4 {
        $fh.put: "hello";
    }
    $fh.close;
}
Run Code Online (Sandbox Code Playgroud)

我期望的是,每次运行时,都应在文件中附加4行“ hello”。但是,它似乎仍会覆盖该文件,在运行2次或更多次后,仍然只有4行。

$ perl6 opening.p6
$ cat somefile.txt
hello
hello
hello
hello
$ perl6 opening.p6
$ cat somefile.txt
hello
hello
hello
hello
Run Code Online (Sandbox Code Playgroud)

添加或删除:a:append似乎不影响此行为,我缺少什么?

Chr*_*oph 12

根据打开的文档,您要

my $h = open 'somefile.txt', :a;
Run Code Online (Sandbox Code Playgroud)

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

:mode<wo>, :create, :truncate
Run Code Online (Sandbox Code Playgroud)

:a扩展到

:mode<wo>, :create, :append
Run Code Online (Sandbox Code Playgroud)

模仿POSIX。

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