Почему открытие с помощью: w и: append все еще перезаписывает файл? - PullRequest
9 голосов
/ 25 мая 2019

Я получил следующий код, чтобы попробовать открыть и записать файл (без рывков):

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

    for 1..4 {
        $fh.put: "hello";
    }
    $fh.close;
}

Что я ожидал, так это то, что при каждом запуске он должен добавлять 4 дополнительные строки со словом "привет" кфайл.Тем не менее, он по-прежнему перезаписывает файл, после 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 Ответ

12 голосов
/ 25 мая 2019

Согласно открытой документации , вы хотите

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

Сокращения из одной и двух букв не являются модификаторами, но могут использоваться изолированно, с расширением :w до

:mode<wo>, :create, :truncate

и :a расширяются до

:mode<wo>, :create, :append

имитирует POSIX.

Комбинация :w, :append, которую вы пробовали, на самом деле также должна открывать файл в режиме добавления - но только после его первого усечения, что не кажется особенно полезным ...

...