我尝试使用Apple文件系统(APFS)在macOS上跟踪Perl的rename问题。我已经能够使用perls将其复制到至少5.12.3,但我的所有内容都是使用Apple LLVM版本9.1.0(clang-902.0.39.1)编译的。这些相同的perls在FAT或HFS +文件系统中没有这个问题。在其他任何地方我都没有注意到这个问题。
第一次运行它。我最终得到了 Changes 和 Changes.bak 。这正是我的预期。
再次运行它。您最终得到更改和更改3 文件。没有 Changes.bak 。这很奇怪。
再次运行它。我最终得到了更改文件, Changes.bak 和更改3 。
再次运行它。我最终得到了更改文件,更改3 和更改4 。同样,没有 Changes.bak 。
如果我删除了print
行,我就无法将其呈现("医生,当我像这样移动我的手臂时,它会受伤#34;)。
我重新命令文件句柄打开和关闭,但似乎没有解决任何问题。
我认为在文件系统级别发生了一些事情。所以我真的有两个问题:
这是一个错误,在什么级别?在我开始搞乱文件句柄之前,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;