【发布时间】:2012-06-27 00:45:06
【问题描述】:
我对 Perl 还很陌生,很难掌握以下密码输入代码 sn-p 的行为:
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]。
对此行为的一些见解将不胜感激。
【问题讨论】:
-
@KenWhite 感谢您的编辑。这是一个令人尴尬的;-)
标签: windows perl windows-console