Correcto flujo interactivo en perl

Mi script perl necesita pedirle al usuario una contraseña para descargar algunos archivos:

print "Your password please: \n";
ReadMode('noecho');
$password = ReadLine(0);
$password =~ s/\n//;
ReadMode(0);

system("wget --user=user --password=\"$password\" http://some.server/data.xml");
do_something();

If I call the script with $> ./script.pl everything works fine. But if I want to pipe the output to a file with $> ./script.pl > text.txt, the password question is piped to the file, too, and the ReadLine does not work any longer.

¿Cuál es la forma correcta de hacer esto?

0
La solución más fácil es, probablemente, agregar -O text.txt a su comando wget .
agregado el autor flesk, fuente

2 Respuestas

Imprima el mensaje a STDERR :

print STDERR "Your password please: ";
3
agregado

La ganancia de seguridad de leer la contraseña directamente desde el teclado se anula mediante un bombardeo a wget , en cuyo entorno la contraseña es claramente visible para todos los usuarios del sistema. Si la seguridad no importa, puede volver a escribir su programa en tomar los parámetros de línea de comandos para el usuario/contraseña.

0
agregado