2010-01-16 5 views
6

나는 입력을 <STDIN>에서 취하고 지속적으로 요청을 처리하는 cygwin에서 Perl 스크립트를 실행 중입니다. "입력을 입력 :"이제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: 

, 나는 현재 프롬프트에서 위쪽 화살표를하고자하는 이전의 입력이

"입력 1", "입력 2"를, 즉 걸릴 그것은에서 실행할 때 예상대로 동작 윈도우 enivronment (cmd.exe를)
그러나 Cygwin에서 아래의 문제가 위쪽 화살표는 문자 그대로는 라인에 걸리는 즉 커서 한 행을 차지한다는 것입니다 "받았다 입력 : 입력 2"이에 대한 여러분의 생각을 공유하십시오

.

+1

당신은 키 입력을 처리하기 위해 사용하는 코드를 공유하십시오 :

은 기간 ::에서는 ReadLine을 사용하는 프로그램의 직접적인 번역 될 것이다. 또한 명확한 질문이 포함되도록 게시물을 수정하는 것이 좋습니다. – Ether

+0

의견을 남긴 Ether에게 감사드립니다. 나는 코드 스 니펫을 첨부하고 더 명확하게 질문을 수정했다. 나는 키 입력을 처리하기 위해 특별한 루틴을 사용하지 않고 그냥 표준 입력 을 캡처한다. 정보가 더 필요하면 알려주십시오. –

+0

이것은 터미널 구성 문제입니다. cygwin에서 제공하는 터미널을 항상 싫어했습니다. –

답변

4

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

Windows 콘솔과 유닉스 터미널 간의 명령 행 기록 처리에는 큰 차이가 있습니다. Windows에서는 콘솔에 의해 처리되는 반면 Unix에서는 응용 프로그램에 의해 처리됩니다. 필자는 Perl에 대해 아무것도 모르지만 readline 라이브러리와 같은 것을 사용해야 할 것이다. 유용한 정보 : http://perldoc.perl.org/functions/readline.html

+0

readline 라이브러리와 같은 이름의 Perl 함수는 다른 맹수입니다. –

관련 문제