无法使用 Win32::Console 将 0 作为密码输入

unable to take 0 as password input using Win32::Console

我是这个领域的新手。我正在使用以下代码来屏蔽密码。它工作正常但在使用其中包含 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"在Perl中是假值,所以这个条件

$Data = $handle->InputChar(1)
$handle->InputChar(1) returns "0" 字符串时,

为假。也许更好的检查是输入是否与空字符串不匹配:

while ((my $Data = $handle->InputChar(1)) ne "") { ...