如何在Perl中组合printf和readline

时间:2013-03-12 22:58:28

标签: perl printf readline prompt

我正在尝试用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('--> ');

1 个答案:

答案 0 :(得分:1)

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

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

或者,您可以更频繁地使STDOUT冲洗:

local $| == 1;

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

my $new_value = $term->readline(sprintf '%-12s-->', 'Input: ');