我有一个处理管道的Perl脚本.在某些时候,我希望脚本暂停并要求用户键盘输入.我的$input =< STDIN> ;;不起作用.它只是从管道中读取下一行.如何让Perl使用不同的句柄进行管道输入和键盘输入?
解决方法
如果您使用的是Unix平台,则可以打开文件句柄到/ dev / tty(或使用
IO::Pty
).使用tty的一个很好的例子是“测试程序是否以交互方式运行”示例:
http://pleac.sourceforge.net/pleac_perl/userinterfaces.html
您还应该考虑通过Term::ReadKey
(在perlfaq8中描述)进行密码IO – 我认为它可能与TTY相关而不是STdio,但我不确定.如果不是,请使用0700年底列出的TTY Term :: ReadKey解决方案.
这是一个例子.
It’s not the best style (doesn’t use 3-arg form of open
,nor uses lexical filehandles)但它应该工作.
use autodie; # Yay! No "or die '' " use Term::ReadKey; open(TTYOUT,">/dev/tty"); print TTYOUT "Password?: "; close(TTYOUT); open(TTY,"</dev/tty"); ReadMode('noecho',*TTY); $password = ReadLine(0,*TTY);