use Term::ReadKey; ReadMode 'noecho'; my $passw = ReadLine; ReadMode 'restore'; print "$passw\n"; # just to check #### use Term::ReadKey; use Fcntl "O_RDWR"; if ($^O =~ /Win32/i) { sysopen IN, 'CONIN$', O_RDWR or die "Unable to open console for input: $!"; } else { open IN, "<", "/dev/tty" or die "Unable to open tty for input: $!"; } ReadMode 'noecho', *IN; my $passw = ReadLine 0, *IN; ReadMode 'restore', *IN; print "$passw\n"; # just to check #### use Term::ReadKey; use Fcntl "O_RDWR"; if ($^O =~ /Win32/i) { sysopen IN, 'CONIN$', O_RDWR or die "Unable to open console for input: $!"; } else { open IN, "<", "/dev/tty" or die "Unable to open tty for input: $!"; } ReadMode 'noecho', *IN; my ($ch, $passw); do { $ch = ReadKey 0, *IN; $passw .= $ch; substr($passw,-2)='' if ord($ch)==127; # BS } until ($ch eq "\n"); ReadMode 'restore', *IN; print "$passw\n";