4

次のスクリプトがあります。これは、ドキュメントの概要段落のサンプルとほぼ同じです。

use strict;
use warnings;
use Term::ReadLine;

my $term = Term::ReadLine->new('My shell');
print $term, "\n";
my $prompt = "-> ";

while ( defined ($_ = $term->readline($prompt)) ) {
   print $_, "\n";
   $term->addhistory($_);
}

エラーなしで実行されますが、残念ながら、上向き矢印をクリックしても、^[[A履歴は取得されず、取得されません。私は何が欠けていますか?

print $termステートメントが出力されますTerm::ReadLine::Stub=ARRAY(0x223d2b8)

私たちがここにいるので、下線が引かれたプロンプトが出力されることに気付きました...しかし、それを妨げる可能性のあるものはドキュメントに見つかりません。それを回避する方法はありますか?

4

1 に答える 1

7

主な質問に答えるには、おそらく適切な Term::ReadLine ライブラリがインストールされていません。「perl-Term-ReadLine-Perl」または「perl-Term-ReadLine-Gnu」のいずれかが必要になります。これらは fedora のパッケージ名ですが、ubuntu/debian の名前も似ていると確信しています。CPAN からも取得できると思いますが、テストしていません。パッケージをインストールしていない場合、perl はほとんど機能のないダミー モジュールをロードします。このため、歴史はその一部ではありませんでした。

下線は、readline が装飾と呼ぶものの一部です。それらを完全にオフにしたい場合は、$term->ornaments(0);適切な場所を追加してください。

あなたのスクリプトの私の書き直しは次のとおりです

#!/usr/bin/perl
use strict;
use warnings;

use Term::ReadLine; # make sure you have the gnu or perl implementation of readline isntalled
# eg: Term::ReadLine::Gnu or Term::ReadLine::Perl
my $term = Term::ReadLine->new('My shell');
my $prompt = "-> ";
$term->ornaments(0);  # disable ornaments.

while ( defined ($_ = $term->readline($prompt)) ) {
   print $_, "\n";
   $term->addhistory($_);
}
于 2013-03-13T15:15:33.893 に答える