2010-01-16 15 views
6

Sto eseguendo script Perl sotto cygwin che prende input da <STDIN> ed elabora continuamente le richieste.Come posso gestire i tasti freccia in uno script Perl sotto 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: 

Ora, vorrei che la freccia al prompt corrente: "Enter Ingresso:" per prendere gli input precedenti, vale a dire "input2", "input1"

si comporta come previsto durante l'esecuzione in finestre enivronment (cmd.exe)
Ma il problema sotto cygwin è che la freccia prende letteralmente la fila del cursore 1 fino cioè che serve per la linea "di input ricevuti: input2"

si prega di condividere i tuoi pensieri su questo.

+1

Si prega di condividere il codice che si utilizza per elaborare le sequenze di tasti. Inoltre, potresti voler riformulare il tuo post in modo che contenga una domanda chiara. – Ether

+0

Grazie Ether per il commento. Ho allegato lo snippet di codice e riformulato la domanda per essere più chiara. Non sto usando alcuna routine speciale per elaborare le sequenze di tasti, è solo la cattura dello standard input . Per favore fatemi sapere se ulteriori informazioni sono richieste ulteriormente. –

+0

Questo è un problema di configurazione del terminale, penso. Ho sempre odiato i terminali forniti da cygwin. –

risposta

4

Guarda il modulo Term :: Readline. Questo prenderà in carico gli input per il tuo programma e manterrà la cronologia, che è ciò di cui penso tu stia parlando.

Questa sarebbe una traduzione diretta del programma di utilizzare 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

C'è una grande differenza nella gestione della cronologia della riga di comando tra la console Windows ei terminali Unix. Su Windows, è fatto dalla console, mentre su Unix, le applicazioni ne sono responsabili. Non so nulla di Perl, ma dovrai usare qualcosa come la libreria readline. Questo sembra utile: http://perldoc.perl.org/functions/readline.html

+0

La libreria readline e la funzione Perl con lo stesso nome sono bestie diverse. –

Problemi correlati