gpt4 book ai didi

perl - 使用 ActivePerl 时为什么必须指定带有备份扩展的 -i 开关?

转载 作者:行者123 更新时间:2023-12-02 23:54:08 26 4
gpt4 key购买 nike

除非我使用备份扩展指定它们,否则我无法就地编辑在 ActivePerl 下运行的 Perl 单行代码:

C:\> perl -i -ape "splice (@F, 2, 0, q(inserted text)); $_ = qq(@F\n);" file1.txt
Can't do inplace edit without backup.

使用 -i.bak-i.orig 执行相同的命令很有效,但会在此过程中创建不需要的备份文件。

有办法解决这个问题吗?

最佳答案

这是 Windows/MS-DOS 的限制。根据perldiag :

You're on a system such as MS-DOS that gets confused if you try reading from a deleted (but still opened) file. You have to say -i.bak, or some such.

Perl 的 -i 实现会导致它删除 file1.txt,同时保留其打开句柄,然后重新创建同名的文件。这允许您“读取”file1.txt,即使它已被删除并正在重新创建。不幸的是,Windows/MS-DOS 不允许您删除附加了打开句柄的文件,因此此机制不起作用。

最好的办法是使用-i.bak,然后删除备份文件。这至少为您提供了一些保护 - 例如,如果 perl 以非零退出代码退出,您可以选择不删除备份。像这样的东西:

perl -i.bak -ape "splice...." file1.txt && del file1.bak

关于perl - 使用 ActivePerl 时为什么必须指定带有备份扩展的 -i 开关?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2616865/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com