我怎样才能让Perl一次从STDIN输入一个字符?

时间:2011-12-30 04:00:47

标签: perl input

我有点像Perl的初学者(与此处的人相比)。我知道足够能够通过命令提示符编写程序来执行许多操作。有一次,我决定写一个构建迷宫的命令提示游戏让我解决它。除了高质量的图形外,它唯一缺少的是能够让我在迷宫中每次移动后都不使用输入而使用WASD控件。

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

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

此外,$/=""是否实际上绕过输入,或者输入是否如此之快以至于假设我没有输入任何输入?

3 个答案:

答案 0 :(得分: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 :(得分:1)

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

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

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

答案 2 :(得分:-1)

实现目标的最短途径是使用这种特殊结构:

$/ = \1;

这告诉perl一次读取一个字符。下次从任何流中读取时(不仅仅是STDIN)

my $char = <STREAM>;

每个作业将读取1个字符。从perlvar“设置$ /到对整数的引用,包含整数的标量或可转换为整数的标量将尝试读取记录而不是行,最大记录大小是引用的整数字符数。“