Perl的重命名是否在APFS上做了一些奇怪的事情?

时间:2018-06-11 21:15:23

标签: macos perl apfs

我尝试使用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;

0 个答案:

没有答案