Perl - 如何在一行上输出所有内容

时间:2014-03-12 11:30:03

标签: perl

我是PERL的新手,但是当我在C工作时,他很快就把它拿起来了。

我的问题似乎很简单,但对于我的生活,我找不到简单的答案。基本上我想在与用户输入相同的行上打印一些东西

示例

print "Please Enter Here: ";
my $input = <STDIN>;
chomp $input;
print " - You Entered: $input";

输出

请输入此处:123
  - 你输入了:123

这是不受欢迎的,因为我想在终端窗口的一行上完成所有这些操作。此时,一旦用户按下回车键,它就会在下面一行打印第二个字符串。我想我需要做的是与STDIN一样的东西,比如忽略回车或换行,但我不确定。

所需输出

请输入此处:123 - 您输入:123

我不知道为什么这对谷歌来说似乎是一件复杂的事情,但我还没有弄清楚它,所以任何帮助都会受到赞赏。

TA

2 个答案:

答案 0 :(得分:2)

嗯,这很有意思......

首先,您必须使用IO::Stty之类的内容关闭终端回显。完成后,您可以使用getc。请注意,getc perldoc页面有一个可以使用的示例程序。您可以循环,直到获得\n个字符作为输入。

您也可以尝试Term::ReadKey

我自己从未这样做过。我将不得不试一试,如果我成功了,我会发布答案。


该计划

结束我已安装Term::ReadKey

#! /usr/bin/env perl
#
use warnings;
use strict;
use feature qw(say);

use Term::ReadKey;

ReadMode 5;  # Super Raw mode

my $string;

print "Please Enter Here: ";
while ( my $char = getc ) {
    last if ord( $char ) < 32;  # \r? \n? \l?
    $string .= $char;
    print "$char";
}

ReadMode 0;
say qq( - You entered "$string".);

我意识到,根据终端的设置方式,按<RETURN>时很难确切知道返回的内容。因此,我发誓并寻找在空格之前的任何ASCII字符。


还有一件事:我没有处理如果用户点击退格或其他特殊字符会发生什么。相反,我只是简单地说,这可能不是你想要做的。

答案 1 :(得分:-1)

最后我做了:

"\033[1A\033[45C

它使用代码函数排队和45缩进,它的工作原理。感谢所有的帮助。