我对 Perl 相当陌生,并且很难掌握以下密码输入代码片段的行为:
use Win32::Console;
my $StdIn = new Win32::Console(STD_INPUT_HANDLE);
my $Password = "";
$StdIn->Mode(ENABLE_PROCESSED_INPUT());
local $| = 1;
print "Enter Password: ";
while (my $Data = $StdIn->InputChar(1)) {
if ("\r" eq $Data ) {
last;
}
elsif ("\ch" eq $Data ) {
if ( "" ne chop( $Password )) {
print "\ch \ch";
}
next;
}
$Password .=$Data;
print "*";
}
while (my $Data = $StdIn->InputChar(1)) {
print "\nShow password? [y/n] ";
if ("n" eq $Data) {
last;
}
elsif ("y" eq $Data) {
print "\nPassword: $Password\n";
last;
}
}
基本上发生的情况是脚本提示用户输入密码并按*
预期显示每个字符输入,但需要Enter按两次才能接受输入。但是,如果我删除第二个 while 循环(或用print $password
语句替换),输入只需要按一次Enter.
我还注意到,在第二个 while 循环中,提示用户输入y或n(无需按Enter)如果用户输入“y”,则Show password? [y/n]
在显示密码之前重复该行。
对此行为的一些见解将不胜感激。