11

我认为这在某种程度上与 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.bakChanges 3

  • 再次运行它。我最终得到了一个Changes文件,Changes 3Changes 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;
4

0 回答 0