Как я могу обработать клавиши со стрелками в сценарии Perl под cygwin?

Я запускаю скрипт 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:

Теперь, я хотел бы стрелку вверх при текущей подсказке: "Введите вход": взять предыдущие исходные данные т.е. "input2", "input1"

Это ведет себя как ожидалось при выполнении под окнами enivronment (cmd.exe)
Но проблема под cygwin состоит в том, что стрелка вверх буквально поднимает строку курсора 1, т.е. это берет к строке "Recieved input:input2"

Совместно используйте свои мысли об этом.

6
задан brian d foy 16 January 2010 в 20:44
поделиться

2 ответа

Просто добавляя «я тоже» здесь, на Funky выделение кода. Я работаю VS2008 с C #. У меня есть проект Windows Forms, ссылаясь на библиотеку классов в другом проекте, и я отладку обеих строки по линии. «В какой-то момент« желтая подсветка в отладке было где угодно от 14 до 20 линий от фактической выполненной линии.

Я закрыл VS, открыл каталоги как для обоих проектов, удалил все из Bin / Debug и OBJ / DEBUG в обоих каталогах, затем перезапускается против Об перекомпилировании и наступая через отладку, все было снова в порядке.

Я не знаю, был ли проблема в .manifest, stbdb или, возможно, файл .cache. Это не имеет значения. Удалить все и все будет хорошо.

FWIW, Googleing был чуть не бесполезным, за исключением того, что он вернул эту тему. Все остальные хиты были о проблемах с шаблонами VC ++ и VS2005, где исправил эту проблему. Это не та же проблема.

-121--2964893-

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

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

4
ответ дан 17 December 2019 в 04:47
поделиться

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

1
ответ дан 17 December 2019 в 04:47
поделиться
Другие вопросы по тегам:

Похожие вопросы: