2010-01-16 24 views
6

Używam skryptu Perl pod cygwin, który pobiera dane wejściowe z <STDIN> i nieprzerwanie przetwarza żądania.Jak mogę obsługiwać klawisze strzałek w skrypcie Perla pod cygwin?

#!/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: 

Teraz chciałbym się strzałka w bieżącym wierszu: „Enter wejście:” wziąć dotychczasowe nakłady, czyli „input2”, „input1”

Zachowuje się zgodnie z oczekiwaniami, gdy uruchomiony pod okna enivronment (cmd.exe)
Ale problemem jest to, że pod Cygwin strzałki w górę dosłownie bierze kursor 1 wiersz w górę czyli trwa do linii „otrzymaliśmy wejścia: input2”

Proszę podzielić się swoimi przemyśleniami na ten temat.

+1

Proszę udostępnić kod, który jest używany do przetwarzania klawiszy. Możesz również zmienić zdanie w swoim poście, tak aby zawierał jednoznaczne pytanie. – Ether

+0

Dzięki Ether dla komentarza. Dołączyłem fragment kodu i zmieniłem pytanie, aby było bardziej zrozumiałe. Nie używam żadnych specjalnych procedur do przetwarzania naciśnięć klawiszy, a jedynie przechwytywania standardowego wejścia . Proszę dać mi znać, jeśli dalsze informacje są wymagane. –

+0

To jest problem z konfiguracją terminala, jak sądzę. Zawsze nienawidziłem terminali dostarczanych przez cygwin. –

Odpowiedz

4

Sprawdź moduł Term :: Readline. To przejmie dane wejściowe dla twojego programu i obsłuży historię, o czym myślę, że mówisz.

Byłoby to bezpośrednie tłumaczenie z użyciem programu do 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

Istnieje duża różnica w obsłudze historii wiersza poleceń między konsolą systemu Windows i terminalami Unix. W systemie Windows jest to wykonywane przez konsolę, podczas gdy w systemie Unix za to odpowiadają aplikacje. Nie wiem nic na temat Perla, ale musisz użyć czegoś podobnego do biblioteki readline. To wygląda na pomocne: http://perldoc.perl.org/functions/readline.html

+0

Biblioteki readline i funkcja Perl o tej samej nazwie to różne bestie. –

Powiązane problemy