Term::ReadLine::Gnuを使用すると、大文字と小文字を区別しない補完ができないようです。次のスクリプトの例をご覧ください:Term :: ReadLine :: Gnuで大文字と小文字を区別しない補完を行うにはどうすればよいですか?
use strict;
use warnings;
use 5.010;
use Term::ReadLine;
my $term = Term::ReadLine->new('test');
say "Using " . $term->ReadLine;
if (my $attr = $term->Attribs) {
$term->ornaments(0);
$attr->{basic_word_break_characters} = ". \t\n";
$attr->{completer_word_break_characters} = " \t\n";
$attr->{completion_function} = \&complete_word;
} # end if attributes
my @words = qw(apple approve Adam America UPPER UPPERCASE UNUSED);
sub complete_word
{
my ($text, $line, $start) = @_;
return grep(/^$text/i, @words);
} # end complete_word
while (1) {
$_ = $term->readline(']');
last unless /\S/; # quit on empty input
} # end while 1
complete_word
は大文字と小文字を区別しません。私がTerm::ReadLine::Perl(PERL_RL=Perl perl script.pl
を実行することによって)を実行すると、期待どおりに動作します。 a<TAB><TAB>
と入力すると、すべての4ワードがリストされます。 u<TAB><TAB>
と入力するとu
がU
に変換され、3語が表示されます。
代わりにTerm::ReadLine::Gnu(PERL_RL=Gnu perl script.pl
またはちょうどperl script.pl
)を使用すると、大文字と小文字が区別されます。 a<TAB>
と入力すると、app
となります。 u<TAB><TAB>
と入力すると補完物は表示されません。
私もにset completion-ignore-case on
がありますが、それでもここでは機能しません。 (ただし、bash
では正常に動作します)
Term::ReadLine::Gnuには大文字と小文字を区別しない補完を行う方法はありますか?
私は[パッチと一緒に(https://rt.cpan.org/Ticket/Display.html?id=72378)[このバグを報告]しましたそれを修正する](https://rt.cpan.org/Ticket/Attachment/998813/520214/completion.patch)。 – cjm
私のパッチは 'Term :: ReadLine :: Gnu'バージョン[1.21](https://metacpan.org/changes/distribution/Term-ReadLine-Gnu)に適用されました。 – cjm