1

STDIN を readline に置き換えようとしています。STDIN を使用する場合 (コメントのように、コードを参照)、カーソルは同じ行の printf 出力の直後に入力できる状態になります。しかし、readline を使用すると、printf 出力が何らかの形でなくなり、readline プロンプトのみが表示されます。「print "\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 に答える