Подтвердить что ты не робот

Perl -i без аргументов создает резервный файл на 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:

  • Создание и изменение в пустой каталог
  • Создайте текстовый файл в этом каталоге. Содержание не важно
  • Запустить perl -p -i -e 's/perl/Perl/g' filename
  • Проверьте файл .bak, когда вы закончите

Сохраните ответы для объяснения того, что может произойти, если вы найдете этот файл резервной копии. Продвижение предыдущего комментария для "Да, я вижу это" или "Нет, не могу воспроизвести его" может быть неофициальным опросом.

4b9b3361

Ответ 1

perldoc perlcygwin говорит (отредактирован для ясности):

Из-за ограничений Windows-ish, редактирование файлов с помощью perl -iдолжен создать резервное копирование каждого редактируемого файла. Поэтому Perl автоматически добавляет суффикс .bak - как хотя вызывается с помощью perl -i.bak - если вы используете perl -i без явного расширения для резервного копирования.

Возможно, эта информация также должна быть в perlport.

Ответ 2

Да. Например:

    # 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