16

我有一个可靠人的错误报告,在 Cygwin 和 Perl 5.14.2 上,使用-i没有值的 perl 开关会创建一个.bak备份文件。它不应该根据perlrun中的文档:

If no extension is supplied, no backup is made and the current
file is overwritten.

我目前无法访问 Cygwin。有没有其他人看到这种行为?你能解释一下吗?是关于创建备份文件的事情,它应该只是一个临时文件,并且无法删除它?

这是我建议重新创建它的步骤。请记住,这是针对 Cygwin 的:

  1. 创建并更改为空目录
  2. 在该目录中创建一个文本文件。内容不重要
  3. perl -p -i -e 's/perl/Perl/g' filename
  4. 完成后检查.bak文件

如果您找到该备份文件,请保存答案以说明可能发生的情况。对“是的,我看到了”或“不,无法复制”的先前评论进行投票可能是非正式的民意调查。

4

2 回答 2

17

perldoc perlcygwin sayeth(为清楚起见进行了编辑):

由于 Windows 限制,文件的就地编辑perl -i 必须为每个正在编辑的文件创建备份。因此 Perl 会.bak自动添加后缀——就像调用 with 一样perl -i.bak——如果你使用perl -i没有明确的备份扩展名。

可以说,这些信息也应该在perlport中。

于 2012-06-17T22:17:44.893 回答
1

是的。例如:

    # show we're in cygwin
% uname -a
CYGWIN_NT-6.1-WOW64 xzodin 1.7.15(0.260/5/3) 2012-05-09 10:25 i686 Cygwin
    # show that directory is empty
% ls
    # create a file
% touch foo
    # invoke 'perl -pi' (but do nothing)
% perl -pi -e "" foo
    # show that a backup file with extension '.bak' is created.
% ls
foo  foo.bak
于 2013-08-20T13:43:19.730 回答