2010-01-16 10 views
6

Estoy ejecutando script Perl bajo cygwin, que toma la entrada desde <STDIN> y procesa las solicitudes continuamente.¿Cómo puedo manejar las teclas de flecha en un script Perl en 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: 

Ahora, me gustaría que la flecha hacia arriba en el símbolo actual: "Enter de entrada:" a tomar las entradas anteriores, es decir, "ENTRADA 2", "INPUT1"

Se comporta como se esperaba cuando se ejecuta en ventanas enivronment (cmd.exe)
Pero el problema es que bajo cygwin la flecha hacia arriba, literalmente, toma la fila 1 del cursor hacia arriba, es decir que se necesita para la línea "de entrada Recibido: INPUT2"

por favor comparta sus pensamientos sobre esto.

+1

favor compartir el código que está utilizando para procesar las pulsaciones de teclado. Además, es posible que desee reformular su publicación para que contenga una pregunta clara. – Ether

+0

Gracias Ether por el comentario. He adjuntado el fragmento de código y reformulé la pregunta para que sea más clara. No estoy usando ninguna rutina especial para procesar las teclas, solo captura la entrada estándar . Por favor, avíseme si se requiere más información. –

+0

Este es un problema de configuración de terminal, creo. Siempre he odiado las terminales que proporciona cygwin. –

Respuesta

4

Consulte el módulo Term :: Readline. Esto tomará el control de entrada para su programa, y ​​maneja la historia, que es de lo que creo que está hablando.

Esta sería una traducción directa de su programa para el uso 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

Hay una gran diferencia en el manejo del historial de línea de comandos entre la consola de Windows y los terminales Unix. En Windows, la consola lo hace, mientras que en Unix, las aplicaciones son responsables de ello. No sé nada sobre Perl, pero necesitarás usar algo como la biblioteca readline. Esto se ve útil: http://perldoc.perl.org/functions/readline.html

+0

La biblioteca readline y la función Perl del mismo nombre son bestias diferentes. –

Cuestiones relacionadas