2010-01-16 1 views
6

Ich benutze Perl-Skript unter Cygwin, die Eingabe von <STDIN> nimmt und die Anfragen kontinuierlich verarbeitet.Wie kann ich mit Pfeiltasten in einem Perl-Skript unter cygwin umgehen?

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

Jetzt würde ich den Pfeil nach oben an der aktuellen Eingabeaufforderung erhalten: „Enter-Eingang:“ die vorherigen Eingaben zu übernehmen, dh „input2“, „input1“

Es verhält sich wie erwartet, wenn unter fliessendem Fenster enivronment (cmd.exe)
Aber das Problem unter cygwin ist, dass der Pfeil nach oben buchstäblich den Cursor nach oben 1 Zeile nimmt also mit der Leitung nimmt „Empfing Eingang: input2“

Bitte denken sie über diese teilen.

+1

Bitte den Code teilen, dass Sie die Tastenanschläge zu verarbeiten verwenden. Vielleicht möchten Sie auch Ihren Beitrag so umformulieren, dass er eine klare Frage enthält. – Ether

+0

Danke Ether für den Kommentar. Ich habe das Code-Snippet angehängt und die Frage umformuliert, um klarer zu sein. Ich verwende keine speziellen Routinen, um die Tastenanschläge zu verarbeiten, es erfasst nur die Standardeingabe . Bitte lassen Sie mich wissen, wenn weitere Informationen benötigt werden. –

+0

Dies ist ein Terminal-Konfigurationsproblem, denke ich. Ich habe die Terminals, die Cygwin anbietet, immer gehasst. –

Antwort

4

Schauen Sie sich den Begriff :: Readline-Modul. Dies übernimmt die Eingabe für Ihr Programm und verarbeitet den Verlauf, worüber Sie sprechen.

Dies würde eine direkte Übersetzung des Programms zu verwenden 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

Es gibt einen großen Unterschied in der Handhabung des Befehlszeilenprotokolls zwischen der Windows-Konsole und Unix-Terminals. Unter Windows geschieht dies über die Konsole, während unter Unix Anwendungen dafür verantwortlich sind. Ich weiß nichts über Perl, aber Sie müssen etwas wie die readline-Bibliothek verwenden. Das sieht hilfreich aus: http://perldoc.perl.org/functions/readline.html

+0

Die readline-Bibliothek und die gleichnamige Perl-Funktion sind verschiedene Bestien. –

Verwandte Themen