【发布时间】:2015-09-02 17:10:31
【问题描述】:
我是这个领域的新手。我正在使用下面的代码来屏蔽密码。它工作正常,但在输入密码为 0(例如 Pass012)时出现问题。
只要我输入 0,这个脚本就会退出。它根本没有将 0 作为输入。我试图找出原因,似乎my $Data = $handle->InputChar(1))无法读取0,我不知道为什么。
任何人都可以深入研究此代码,让我知道这里可能存在什么问题以及如何将 0 作为密码输入?
#!/usr/bin/perl
use Win32::Console;
use strict; use warnings;
use Win32::Console;
run();
sub run {
my $StdIn = Win32::Console->new(STD_INPUT_HANDLE);
$StdIn->Mode(ENABLE_PROCESSED_INPUT);
my $Password = prompt_password($StdIn, "Enter Password: ", '*');
print "\n$Password";
return;
}
sub prompt_password {
my ($handle, $prompt, $mask) = @_;
my ($Password);
local $| = 1;
print $prompt;
$handle->Flush;
while (my $Data = $handle->InputChar(1)) {
last if "\r" eq $Data;
if ("\ch" eq $Data ) {
if ( "" ne chop( $Password )) {
print "\ch \ch";
}
next;
}
$Password .= $Data;
print $mask;
}
return $Password;
}
【问题讨论】:
标签: perl mask perl-module mod-perl