我认为这在某种程度上与 iCloud Drive 有关,但我没有调查过。
我正在尝试使用 Apple 文件系统 (APFS) 在 macOS 上查找Perl重命名的问题。我已经能够使用 perls 将其复制回至少 5.12.3,但我所有的都是使用 Apple LLVM 版本 9.1.0 (clang-902.0.39.1) 编译的。那些相同的 perls 在 FAT 或 HFS+ 文件系统中没有这个问题。我在其他任何地方都没有注意到这个问题。
第一次运行它。我最终得到一个Changes和一个Changes.bak。这正是我所期望的。
再次运行它。你最终得到了Changes and 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;