2

私は Term::ReadLine を使用していますが、addhistory から項目を取得するために上矢印を 2 回押す必要があるという奇妙な問題があります。これが私が使用しているスクリプトです。

use Term::ReadLine;

my $term = Term::ReadLine->new('Term1');
print $term->ReadLine."\n";

while (defined(my $cmd = $term->readline())) {
    $term->addhistory($cmd) if $cmd =~ /\S/;
}

テストするために、いくつかの「コマンド」を入力してから、上向き矢印でそれらのコマンドを取得してみます。上向き矢印を 1 回押すと、最後のアイテムがすぐに表示されますが、次の各アイテムを取得するには、上向き矢印を 2 回押す必要があります。

私が取り組んでいる小さなプロジェクトの早い段階でこの問題に遭遇し、同じ問題を抱えている人に出会いました。この問題を解決するには、addhistory 行を次のように変更します。

$term->addhistory($cmd) if $cmd !~ /\S||\n/;

それはうまくいったので、私が投稿した別の質問でTanktalusがこれを持ち出すまで先に進みました。Perl Term::ReadLine::Gnu シグナル処理の問題

彼は「/\S||\n/ は何をすべきか?」と尋ねます。わかりました、これを修正として提案したページを探しに行きましょう...ええ...見つかりません。したがって、投稿した変更で動作させることはできますが、A.なぜそれが修正されるのかわかりません.B.なぜ私だけがこの問題を抱えているように見えるのでしょうか?

ヘルプやアドバイスをいただければ幸いです。:)

上記のスクリプトを次のバージョンでテストしました。

Perl - 5.12.4 and 5.16.1
Term::ReadLine::Gnu - 1.20
Term::ReadLine::Perl - 1.0303 (Just tried it to make sure it wasn't Gnu)
Term::ReadLine - 1.10
4

1 に答える 1

5

/\S||\n/常に一致するため、addhistory を呼び出すことはありません。が true の場合$term->Features->{autohistory}、とにかく必要はありませんでした。

「上向き矢印を 2 回押す」とは、上向き矢印を 2 回押すごとに 1 回履歴を上に移動するということですか? もしそうなら、 addhistory への不必要な呼び出しが原因です。そして、呼び出しを完全に削除することが適切な修正です。

于 2012-11-11T18:20:25.563 に答える