我是这个领域的新手。我使用以下代码来掩盖密码。它工作正常但在输入密码时出现问题,密码中有0(e.x. 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;
}
答案 0 :(得分:4)
字符串"0"
在Perl中是假值,因此这个条件
$Data = $handle->InputChar(1)
$handle->InputChar(1)
返回"0"
字符串时,为false。也许更好的检查输入是否与空字符串不匹配:
while ((my $Data = $handle->InputChar(1)) ne "") { ...