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