Переименовывает ли perl что-то странное в APFS? - PullRequest
0 голосов
/ 12 июня 2018

Я пытаюсь отследить проблему с переименованием Perl в macOS, используя файловую систему Apple (APFS).Я смог повторить это с помощью perls, по крайней мере, до 5.12.3, но все мои скомпилированы с Apple LLVM версии 9.1.0 (clang-902.0.39.1).Те же самые perls не имеют этой проблемы с файловыми системами FAT или HFS +.Я не заметил этой проблемы где-либо еще.

  • Запустите ее в первый раз.Я получаю Changes и Changes.bak .Это именно то, что я ожидал.

  • Запустите его снова.В итоге вы получите файл Changes и Changes 3 . Changes.bak нет.Это странно.

  • Запустите его снова.Я получаю файл Changes , Changes.bak и Changes 3 .

  • Запустите его снова.Я получаю файл Changes , Changes 3 и Changes 4 .Опять же, нет Changes.bak .

  • Если я уберу строку print, я не смогу это представить («Доктор, мне больно, когда ядвигай мою руку вот так ").

  • Я переупорядочил, когда дескриптор файла открывается и закрывается, но, похоже, это ничего не исправило.

Я полагаю, что что-то происходит на уровне файловой системы.Итак, у меня действительно есть два вопроса:

  • Это ошибка и на каком уровне?Разве rename не гарантированно завершит то, что нужно сделать, прежде чем я начну связываться с дескрипторами файлов?

  • Я хочу прочитать старый файл и создать новый, который вставляет некоторые данныев середине.Скопируйте заголовок, вставьте новые строки, выведите все старые строки в новый файл.Я мог бы записать во временный файл и переместить это позже, но я делаю что-нибудь еще глупое?

Если вы можете воспроизвести это поведение, но не знаете, оставьте комментарий.Может быть, есть что-то еще странное в моей системе.


my $changes = "Changes";
my $bak     = $changes . ".bak";

rename $changes, $bak or die "Could not backup $changes. $!\n";

open my $in, '<', $bak or die "Could not read old $changes file! $!\n";
open my $out, ">", $changes;

# comment this print line and there's no problem
print {$out} 'Hello';

close $out;
close $in;
...