2011-12-30 93 views
6

我有点在Perl的初学者(与这里的人相比)。我知道足够的能够编写程序来通过命令提示符执行许多操作。有一次,我决定写一个命令提示符游戏来构建迷宫并让我解决它。除了高质量的图形之外,它唯一缺少的就是我能够在迷宫中做出的每一个动作之后使用WASD控件而不必按下输入。我该如何让Perl每次从STDIN输入一个字符?

为了让我的游戏能够运行,我希望能够让Perl从STDIN获取单个字符作为输入,而不需要我使用某些东西来分隔我的输入,如默认\n。我怎么做到这一点?

我曾尝试在网上搜索一个简单的答案,并在一本我拥有的书中,但我似乎没有找到任何东西。我尝试设置$/="",但似乎绕过了所有输入。我认为对于我的问题可能有一个非常简单的答案,但我也担心这可能是不可能的。

另外,$/=""实际上是否绕过输入,或者它是否如此快速地输入输入,以至于假设我没有按下按键时没有任何输入?

+2

[Term :: ReadKey](http://search.cpan.org/perldoc?Term::ReadKey) – ikegami 2011-12-30 06:08:33

+0

@ikegami完美! – PhiNotPi 2011-12-30 13:37:07

+0

可能的重复[如何在Windows上使用Perl从STDIN读取单个字符?](https://stackoverflow.com/questions/2021482/how-do-i-read-a-single-character-from-stdin - 使用-perl的上窗口) – 2017-07-08 13:19:33

回答

4

IO::Prompt可以使用:

#!/usr/bin/env perl 

use strict; 
use warnings; 

use IO::Prompt; 

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

perldoc -v '$/'相关摘录与设置$/ = ''

输入记录分隔符,换行符默认。这会影响Perl的 关于“行”是什么的想法。像awk的RS变量一样工作,包括 如果将空行设置为空字符串(空行不能包含任何空格或制表符),则将空行视为终止符。

1

如果您使用* nix,您会发现Curses有用。

它有一个getch方法,可以做你想做的。

Term::TermKey也看起来像一个潜在的解决方案。

相关问题