我在cygwin下运行Perl脚本,它从<STDIN>
获取输入并连续处理请求。
#!/usr/bin/perl
print "Enter Input:";
while(<STDIN>) {
print "Recieved Input: $_";
print "Enter Input:";
}
$perl testPerl.pl
Enter input:input1
Recieved input:input1
Enter input:inpt2
Recieved input:input2
Enter input:
现在,我想在当前提示符处的向上箭头:“输入输入:”以获取先前的输入,即“input2”,“input1”
在windows enivronment(cmd.exe)下运行时,它的行为符合预期 但是cygwin下的问题是向上箭头确实将光标向上移动了1行,即“接收输入:输入2”这一行
请分享您的想法。
答案 0 :(得分:4)
查看Term :: Readline模块。这将接管您的程序的输入,并处理历史,这是我认为您正在谈论的。
这将是您的程序直接翻译为使用Term :: ReadLine:
use Term::ReadLine;
my $term = new Term::ReadLine 'Simple Perl calc';
my $prompt = "Enter Input: ";
while ( defined ($_ = $term->readline($prompt)) ) {
print "Recieved Input:$_\n";
$term->addhistory($_) if /\S/;
}
答案 1 :(得分:1)
Windows控制台和Unix终端之间的命令行历史记录处理方式有很大差异。在Windows上,它由控制台完成,而在Unix上,应用程序负责它。我对Perl一无所知,但你需要使用像readline库这样的东西。这看起来很有用:http://perldoc.perl.org/functions/readline.html