Yes, thanks, Term::ReadKey is simpler and more portable. Took some trial-and-error for me to get it working correctly, so for the benefit of the OP here is what I came up with:
#! perl use strict; use warnings; use Term::ReadKey; sub read_input(); my $pw = read_password("Enter password: ", '*'); print "Password is: >$pw<\n"; read_input(); sub read_password { local $| = 1; my ($prompt, $mask) = @_; my $password; print $prompt; ReadMode $Term::ReadKey::modes{noecho}; while (1) { my $datum = ReadKey(-1); # Non-blocked read next unless defined $datum; last if $datum =~ /\R/; if ("\ch" eq $datum) { print "\ch \ch" if chop $password; next; } $password .= $datum; print $mask; } ReadMode $Term::ReadKey::modes{restore}; print "\n"; return $password; } sub read_input() { print "Input: "; my $in = <STDIN>; chomp $in; print "You entered: >$in<\n"; return $in; }
Typical output:
13:46 >perl 881_SoPW.pl Enter password: ***** Password is: >abcde< Input: Hello, world! You entered: >Hello, world!< 13:46 >
Hope that helps,
| Athanasius <°(((>< contra mundum | Iustus alius egestas vitae, eros Piratica, |
In reply to Re^6: Problem with Windows Console input
by Athanasius
in thread Problem with Windows Console input
by anshulzunke
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |