我面临的问题是我无法理解下面的子程序:
sub password()
{
$StdIn = new Win32::Console(STD_INPUT_HANDLE);
my $Password = "";
$StdIn->Mode(ENABLE_PROCESSED_INPUT);
print "Enter Password: ";
while (ord(my $Data = $StdIn->InputChar(1)) !=10)
{
if("\r" eq $Data )
{
last;
}
elsif ("\ch" eq $Data)
{
if( "" ne chop( $Password ))
{
print "\ch \ch";
}
next;
}
$Password .=$Data;
print "*";
}
return $Password;
}
除非密码包含“#”,否则上述脚本适用于所有内容。如果它包含“#”
调用上述子程序的主子程序没有与工具连接,我需要自动化。尽管该工具对#
没有问题 - “当我手动使用它时,它可以正常使用#”。所以我认为Perl本身存在一些问题。你能帮忙吗?
答案 0 :(得分:3)
首先,使用Term::Prompt而不是自己搞乱控制台。
#!/usr/bin/env perl
use strict; use warnings;
use Term::Prompt;
my $pass = prompt P => 'Password: ', undef, undef;
print "$pass\n";
至于你的问题,我假设问题在你没有展示的部分。但请注意
使用Win32::Console->new
rather than indirect object syntax。
您输入的*
字符只有在输入密码后才会显示。如果您坚持在Perl中编写C,请在local $| = 1
之前使用while
。
答案 1 :(得分:0)
您是否尝试显示输入?只需写打印$ Data;看它是否接受输入。