2010-01-16 73 views
6

我正在cygwin下運行Perl腳本,它從<STDIN>獲取輸入並連續處理請求。如何在cygwin下的Perl腳本中處理箭頭鍵?

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

現在,我想在當前提示向上箭頭:「輸入輸入:」拿以前的投入,即「輸入2」,「輸入1」

它的行爲下運行時如預期窗戶enivronment(CMD.EXE)
但在Cygwin的問題是,向上的箭頭字面上採取光標1行了,即它需要行「:收到輸入:輸入2」

請分享你對這個想法。

+1

請分享您使用來處理按鍵的代碼。另外,您可能需要重新修改您的帖子,以便它包含一個明確的問題。 – Ether 2010-01-16 18:13:12

+0

感謝Ether的評論。我附上了代碼片段,並將問題更加明確。我沒有使用任何特殊的例程來處理擊鍵,它只是捕獲標準輸入。請讓我知道是否需要進一步的信息。 – 2010-01-16 20:07:49

+0

這是一個終端配置問題,我想。我一直恨cygwin提供的終端。 – 2010-01-16 20:44:03

回答

4

看看Term :: Readline模塊。這將接管您的程序的輸入,並處理歷史記錄,這正是我認爲您所談論的內容。

這將是你的程序的使用期限::的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

在Windows控制檯和Unix終端之間處理命令行歷史有很大的不同。在Windows上,它由控制檯完成,而在Unix上,應用程序負責它。我對Perl一無所知,但你需要使用像readline庫這樣的東西。這看起來很有幫助:http://perldoc.perl.org/functions/readline.html

+0

readline庫和同名的Perl函數是不同的野獸。 – 2010-01-16 23:19:33