use Term::ReadKey; ReadMode('noecho'); ReadMode('raw'); my $pass = ''; while (1) { my $c; 1 until defined($c = ReadKey(-1)); last if $c eq "\n"; print "*"; $pass .= $c; } ReadMode('restore'); print "\n[$pass]\n";