De forma predeterminada, Perl imprime \ r \ n en un entorno win32. ¿Cómo puedo anular esto? Estoy usando Perl para hacer algunos cambios en algún código fuente en un repositorio, y no quiero cambiar todos los caracteres de nueva línea.¿Cómo puedo imprimir solo una nueva línea de Unix en Perl en Win32?
Intenté cambiar el separador de registros de salida pero sin suerte.
Gracias!
Editar: quería incluir un ejemplo de código - Estoy haciendo una búsqueda y reemplazo durante algunos archivos que siguen un patrón relativamente sencillo como esto:
#!/usr/bin/perl
# test.pl
use strict;
use warnings;
$/ = undef;
$\ = "\n";
$^I=".old~";
while (<>) {
while (s/hello/world/) {
}
print;
}
Esto debe reemplazar todas las instancias de "hola "con" mundo "para cualquier archivo pasado en la línea de cmd.
Edición 2: probé el binmode
como se sugiere sin ninguna suerte inicialmente. Profundicé un poco más y descubrí que $^I
(la variable especial de edición in place) estaba anulando binmode
. ¿Hay algún trabajo para poder usar la edición en el lugar?
Datos 3: Como Sinan señala a continuación, que necesitaba usar binmode ARGVOUT
con $^I
en lugar de binmode STDOUT
en mi ejemplo. Gracias.
Si cambió el separador de registros de salida, entonces eso fue lo único que puede hacer. Supongo que cometió otro error (como no dividir correctamente las líneas entrantes o no masticarlas). –
¿Puedes dar un ejemplo de algún código que imprime '\ r \ n' cuando no lo quieres? – Ether
@Sinan, ¿por qué asumirías que no estoy dispuesto? No estoy dispuesto. No tengo un guion corto a mano. Tengo un guión muy largo y complicado que probablemente no tendrá mucho sentido y sería aún más confuso. Puedo hacer una versión abreviada más tarde esta noche. Pensé que estaba incluyendo las partes relevantes. No sabía que la edición in situ era relevante en ese momento. Gracias. –