我是PERL的新手,但是当我在C工作时,他很快就把它拿起来了。
我的问题似乎很简单,但对于我的生活,我找不到简单的答案。基本上我想在与用户输入相同的行上打印一些东西
示例
print "Please Enter Here: ";
my $input = <STDIN>;
chomp $input;
print " - You Entered: $input";
输出
请输入此处:123
- 你输入了:123
这是不受欢迎的,因为我想在终端窗口的一行上完成所有这些操作。此时,一旦用户按下回车键,它就会在下面一行打印第二个字符串。我想我需要做的是与STDIN一样的东西,比如忽略回车或换行,但我不确定。
所需输出
请输入此处:123 - 您输入:123
我不知道为什么这对谷歌来说似乎是一件复杂的事情,但我还没有弄清楚它,所以任何帮助都会受到赞赏。
TA
答案 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缩进,它的工作原理。感谢所有的帮助。