1

如何防止我的 Perl 脚本在运行时回显终端中输入的内容?

我尝试弄乱system("stty -echo");然后system("stty echo");在最后运行,但是一旦脚本结束,它仍然会显示我键入的内容。我一直在玩这个测试脚本。

#!/usr/bin/perl

use strict;
use warnings;

system("stty -echo");

for (1..15) {

    print "$_\n";
    sleep(1);

}

system("stty echo");

如果从未到达调用的第二个系统,这可能会弄乱终端(也许使用一个END块,但这也不能保证工作)。这也只是 Unix,我的脚本也在 Windows 上运行。

我也找到了模块Term::Readkey,但我不希望引入任何其他模块。

我也尝试关闭STDIN,但这也不起作用。

让这个问题变得更容易的是我在执行过程中根本不需要阅读STDIN,我可以忽略它。

我对这类问题没有太多经验,希望它比我想象的要容易。谢谢!

编辑:如果这有所作为,我在 Perl 5.10 上。

4

1 回答 1

2

看看Term::ReadKey

use strict;
use warnings;
use Term::ReadKey;

ReadMode ( 'noecho' );
my $password = <STDIN>;
ReadMode ( 'normal' );    #Back to your regularly scheduled program

不幸的是,它不是标准模块。而且,我在 Windows 上遇到了一些问题。

于 2013-07-23T01:46:49.607 回答