2011-12-30 31 views
6

Tôi là một người mới bắt đầu ở Perl (so với những người ở đây). Tôi biết đủ để có thể viết chương trình để làm nhiều việc với thông qua dấu nhắc lệnh. Tại một thời điểm, tôi quyết định viết một trò chơi nhắc lệnh đã xây dựng một mê cung và để tôi giải quyết nó. Bên cạnh đồ họa chất lượng, điều duy nhất mà nó bị thiếu là khả năng để tôi sử dụng các điều khiển WASD mà không cần nhấn enter sau mỗi lần di chuyển tôi đã thực hiện trong mê cung.Làm thế nào tôi có thể có Perl lấy đầu vào từ STDIN một ký tự cùng một lúc?

Để làm cho trò chơi của mình hoạt động, tôi muốn có Perl lấy một ký tự làm đầu vào từ STDIN mà không yêu cầu tôi sử dụng thứ gì đó để tách đầu vào của tôi, như mặc định \n. Làm thế nào tôi sẽ thực hiện được điều này?

Tôi đã thử tìm kiếm một câu trả lời đơn giản trực tuyến và trong một cuốn sách mà tôi có, nhưng tôi dường như không tìm thấy bất cứ điều gì. Tôi đã thử thiết lập $/="", nhưng điều đó dường như bỏ qua tất cả đầu vào. Tôi nghĩ rằng có thể có một câu trả lời thực sự đơn giản cho câu hỏi của tôi, nhưng tôi cũng sợ rằng nó có thể là không thể.

Ngoài ra, hiện $/="" có thực sự bỏ qua đầu vào hay không, đầu vào nhanh đến mức giả định không có bất kỳ đầu vào nào nếu tôi chưa nhấn phím?

+2

[Thời hạn :: ReadKey] (http://search.cpan.org/perldoc?Term::ReadKey) – ikegami

+0

@ikegami Tuyệt vời! – PhiNotPi

+0

Có thể trùng lặp [Làm cách nào để đọc một ký tự đơn từ STDIN bằng Perl trên Windows?] (Https://stackoverflow.com/questions/2021482/how-do-i-read-a-single-character-from-stdin -cho-per-on-windows) –

Trả lời

4

IO::Prompt thể được sử dụng:

#!/usr/bin/env perl 

use strict; 
use warnings; 

use IO::Prompt; 

my $key = prompt '', -1; 
print "\nPressed key: $key\n"; 

trích liên quan từ perldoc -v '$/' liên quan đến việc thiết $/ = '':

Đầu vào kỷ lục phân cách, xuống dòng theo mặc định. Điều này ảnh hưởng đến ý tưởng của 01lcủa Perl về "dòng" là gì. Hoạt động giống như biến RS của awk, bao gồm xử lý các dòng trống làm trình kết thúc nếu được đặt thành chuỗi rỗng (dòng trống không thể chứa bất kỳ dấu cách hoặc tab nào).

1

Nếu bạn đang sử dụng * nix, bạn sẽ tìm thấy Curses hữu ích.

Nó có một phương pháp getch làm những gì bạn muốn.

Term::TermKey cũng giống như một giải pháp tiềm năng.

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