2010-01-16 50 views
6

Tôi đang chạy tập lệnh Perl dưới Cygwin, có đầu vào từ <STDIN> và xử lý các yêu cầu liên tục.Làm cách nào để xử lý các phím mũi tên trong tập lệnh Perl trong 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: 

Bây giờ, tôi muốn các mũi tên lên tại dấu nhắc hiện tại: "Nhập đầu vào:" để có những đóng góp trước đó tức là "Input2", "Input1"

Nó hoạt động như mong đợi khi chạy dưới cửa sổ enivronment (cmd.exe)
Nhưng vấn đề dưới Cygwin là mũi tên lên nghĩa đen có con trỏ 1 hàng lên tức là nó cần đến dòng "Đã nhận đầu vào: input2"

Hãy chia sẻ suy nghĩ của bạn về điều này.

+1

Xin hãy chia sẻ mã mà bạn đang sử dụng để xử lý các tổ hợp phím. Ngoài ra, bạn có thể muốn thuật lại cụm từ của mình để bài đăng chứa câu hỏi rõ ràng. – Ether

+0

Cảm ơn Ether đã bình luận. Tôi đã đính kèm đoạn mã và lặp lại câu hỏi để rõ ràng hơn. Tôi không sử dụng bất kỳ thói quen đặc biệt nào để xử lý các lần nhấn phím, nó chỉ ghi lại đầu vào tiêu chuẩn . Vui lòng cho tôi biết nếu có bất kỳ thông tin nào được yêu cầu thêm. –

+0

Đây là vấn đề về cấu hình đầu cuối, tôi nghĩ vậy. Tôi đã luôn luôn ghét các thiết bị đầu cuối mà Cygwin cung cấp. –

Trả lời

4

Nhìn vào thuật ngữ :: Mô đun Readline. Điều này sẽ tiếp nhận đầu vào cho chương trình của bạn và xử lý lịch sử, đó là những gì tôi nghĩ bạn đang nói đến.

Đây sẽ là một bản dịch trực tiếp của chương trình của bạn để sử dụng 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ó sự khác biệt lớn trong việc xử lý lịch sử dòng lệnh giữa bảng điều khiển Windows và thiết bị đầu cuối Unix. Trên Windows, nó được thực hiện bởi giao diện điều khiển, trong khi trên Unix, các ứng dụng chịu trách nhiệm về nó. Tôi không biết gì về Perl, nhưng bạn sẽ cần phải sử dụng một cái gì đó giống như thư viện readline. Điều này có vẻ hữu ích: http://perldoc.perl.org/functions/readline.html

+0

Thư viện readline và hàm Perl cùng tên là những con thú khác nhau. –

Các vấn đề liên quan