Как я могу обрабатывать клавиши со стрелками в скрипте Perl под Cygwin? - PullRequest
6 голосов
/ 16 января 2010

Я запускаю Perl-скрипт под Cygwin, который принимает данные от <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:

Теперь мне нужна стрелка вверх в текущем приглашении: «Enter input:» для ввода предыдущих входных данных, т.е. «input2», «input1»

При работе под Windows Enivronment (cmd.exe) он работает так, как и ожидалось.
Но проблема в Cygwin состоит в том, что стрелка вверх буквально поднимает курсор на 1 строку вверх, то есть на строку «Полученный ввод: input2»

Пожалуйста, поделитесь своими мыслями по этому поводу.

Ответы [ 2 ]

4 голосов
/ 17 января 2010

Посмотрите на модуль Term :: Readline. Это возьмет на себя ввод вашей программы и обработает историю, о которой я думаю, вы говорите.

Это будет прямой перевод вашей программы на использование Term :: ReadLine: </p> <pre> 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/; } </pre> <p>

1 голос
/ 17 января 2010

Существует большая разница в обработке истории командной строки между консолью Windows и терминалами Unix. В Windows это делается консолью, а в Unix за это отвечают приложения. Я ничего не знаю о Perl, но вам нужно использовать что-то вроде библиотеки readline. Это выглядит полезным: http://perldoc.perl.org/functions/readline.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...