支持退格
=info
Author : PAKTC/PerlMonk
=cut
use strict;
use Term::ReadKey;
use Time::HiRes qw/sleep/;
use IO::Handle;
STDOUT->autoflush(1);
print "Input:";
my $passcode = getPassword();
print "\nYour input:", $passcode;
PAUSE();
sub getPassword
{
my $end = 0;
my $key;
my $buff = "";
ReadMode 4;
while ( 1 )
{
while (not defined ($key = ReadKey(-1) ))
{
sleep 0.01;
}
if ( $key eq chr(13) ) { last; }
elsif ( $key eq "\b" ) { reduce(\$buff); }
else { $buff .= $key; print "*"; }
}
ReadMode 0;
return $buff;
}
# 退格处理
sub reduce
{
my ($s_ref) = shift;
my $len = length( $$s_ref );
return if ( $len <= 0 );
$$s_ref = substr( $$s_ref, 0, length($$s_ref)-1 );
print "\b \b";
}
# Press any key to exit ...
sub PAUSE
{
while ( ! ReadKey(-1) ) { sleep 0.01 }
exit;
}
输入输出示例
Input:**********
Your input:abcdeftest