Perl的-i没有参数在Cygwin上创建备份文件吗?

时间:2012-06-17 19:51:50

标签: perl cygwin

我有一个可靠的人的错误报告,在Cygwin和Perl 5.14.2上,使用perl的-i开关没有任何值创建 .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 文件
  5. 保存答案,以便在找到备份文件时解释可能发生的情况。提前评论“是的,我看到了”或“不,不能重现”可以是非正式的民意调查。

2 个答案:

答案 0 :(得分:13)

perldoc perlcygwin sayeth(为清晰起见而编辑):

  

由于Windows-ish限制,使用perl -i就地编辑文件   必须创造一个   备份正在编辑的每个文件。因此,Perl会自动添加后缀.bak   虽然用perl -i.bak调用 - 如果   您使用perl -i而没有明确的备份扩展名。

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

答案 1 :(得分: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