Я запускаю скрипт 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"
Совместно используйте свои мысли об этом.
Просто добавляя «я тоже» здесь, на 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/; }
Существует большая разница в обработке истории командной строки между консолью Windows и терминалами Unix. В Windows это делается консолью, в то время как в Unix за это отвечают приложения. Я ничего не знаю о Perl, но вам нужно использовать что-то вроде библиотеки readline. Это выглядит полезным: http://perldoc.perl.org/functions/readline.html