Perl: ocultar texto si se solicita el password por STDIN

En el caso de que un script en Perl requiera que el usuario introduzca por STDIN un password lo recomendable es que el texto que el usuario escriba no se muestre por pantalla. Para ello Perl cuenta con el módulo Term::ReadKey;.

Este es un ejemplo simple en el que se solicita al usuario que introduzca la password. En ese momento se cambia el modo de lectura (ReadMode) a 4 para que no se muestre por pantalla lo que escribe el usuario, después se restablece con el valor original (0):

#!/usr/bin/perl   
use strict;
use Term::ReadKey;

print "Password requerido: ";
ReadMode(4);
my $password = <STDIN>;
chomp $password;
ReadMode(0);
print "Password = $password\n";

Estos son los distintos ReadMode disponibles:

  • 0 Restore original settings.
  • 1 Change to cooked mode.
  • 2 Change to cooked mode with echo off. (Good for passwords)
  • 3 Change to cbreak mode.
  • 4 Change to raw mode.
  • 5 Change to ultra-raw mode.

Más información en la página del módulo de Perl.