我正在尝试用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('--> ');
答案 0 :(得分:1)
printf
的输出被延迟的原因是缓冲。为避免这种情况,您可以使用未缓冲的STDERR,可能更适合此类输出:
printf STDERR '%-12s', 'Input: ';
或者,您可以更频繁地使STDOUT冲洗:
local $| == 1;
另一种选择是使用sprintf
而不是printf
并将整个表达式放在提示符下:
my $new_value = $term->readline(sprintf '%-12s-->', 'Input: ');