1

我正在尝试用 readline 替换 STDIN。如果我使用 STDIN(如在注释中,请参阅代码),则光标已准备好在同一行中的 printf 输出之后立即输入。但是使用 readline 的 printf 输出不知何故消失了,只有 readline 提示可见。我可以插入“打印”\n“;” (注释掉)在 printf 的下一行,它将提示移动到下一行,并且 printf 输出可见。但是,我希望有一个格式化的提示,并且光标直接在提示之后(同一行)。printf 赋值比下面的例子要复杂一些。printf 是否可行,或者我有什么选择?提前谢谢。

#!/usr/bin/perl -w

use Term::ReadLine;
use Term::ReadKey;
my $term = Term::ReadLine->new('name');

printf "%-12s","Input: ";
# my $new_value = <STDIN>;
# print "\n";
my $new_value = $term->readline('--> ');
4

1 回答 1

1

的输出printf延迟的原因是缓冲。为避免这种情况,您可以使用未缓冲的 STDERR,它可能更适合这种输出:

printf STDERR '%-12s', 'Input: ';

或者,您可以更频繁地刷新 STDOUT:

local $| == 1;

另一种选择是使用sprintf代替printf并将整个表达式放在提示符下:

my $new_value = $term->readline(sprintf '%-12s-->', 'Input: ');
于 2013-03-13T00:09:03.367 回答