2015-09-02 121 views
2

我是這個領域的新手。我正在使用下面的代碼來掩蓋密碼。它工作正常,但有一個密碼,其中有0(e.x. Pass012)在它的問題。使用Win32 :: Console無法取得0作爲密碼輸入

只要我輸入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; 
} 

回答

4

字符串"0"是在Perl假值,所以這種條件

$Data = $handle->InputChar(1) 

爲假時$handle->InputChar(1)返回"0"字符串。也許更好的檢查是輸入是否與空字符串不匹配:

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

非常感謝它對我有用。 – Rajarshi