2012-06-17 11 views
11

Tengo un informe de error de una persona confiable que en Cygwin y Perl 5.14.2, utilizando el interruptor -i de perl sin valor crea un archivo de copia de seguridad .bak. No debe de acuerdo a la documentación en perlrun:¿Perl -i sin argumento crea un archivo de copia de seguridad en Cygwin?

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

no tengo acceso a Cygwin en el momento. ¿Alguien más ve este comportamiento? ¿Puedes explicarlo? ¿Se trata de crear un archivo de copia de seguridad, que solo debería ser un archivo temporal y no eliminarlo?

Aquí están los pasos que sugiero para recrearlo. Recuerde, esto es para Cygwin:

  1. crear y cambiar al directorio vacío
  2. Crear un archivo de texto en ese directorio. Los contenidos no son importantes
  3. Run perl -p -i -e 's/perl/Perl/g' filename
  4. Compruebe si hay un archivo .bak cuando haya terminado

Guardar las respuestas para una explicación de lo que podría estar sucediendo si usted encuentra que el archivo de copia de seguridad. El voto en contra de un comentario anterior para "Sí veo eso" o "No, no puedo reproducirlo" puede ser una encuesta informal.

+0

Sí, veo que –

+0

No, no puede reproducirlo –

+0

La acumulación de cygwin Perl no crear un '.bak' para mí. De hecho, '$^I' contiene' .bak'. La emulación de Unix de Cygwin aparentemente no llega tan lejos como para agregar soporte para archivos anónimos. – ikegami

Respuesta

13

perldoc perlcygwin sayeth (editado para mayor claridad):

Debido a las restricciones de Windows-ish, inplace edición de archivos con perl -i debe crear una copia de seguridad de cada archivo que se está editando. Por lo tanto, Perl agrega el sufijo .bak automáticamente - como aunque se invoca con perl -i.bak - si usa perl -i sin una extensión de copia de seguridad explícita.

Posiblemente esta información debería estar en perlport también.

+0

"Sí, veo eso". en muchas versiones de Cygwin de 5.8.4 a 5.15.6 – mob

+0

Aw, no me siento estúpido. Ni siquiera pensé en buscar ese archivo. –

1

Sí. Por ejemplo:

# 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 
Cuestiones relacionadas