Отладчик Perl не работает со стрелками в Perlbrew

Я бы хотел, чтобы клавиши со стрелками работали для истории команд в отладчике perl. Это решение выглядит хорошо, так как я использую ubuntu, я попробовал

sudo aptitude install libterm-readline-gnu-perl

Но я все равно получаю ^[[A и ^[[B в отладчике perl вместо предыдущих/следующих команд.

Я обнаружил, что это конкретно проблема в моей среде perlbrew. Если я запускаю /usr/bin/perl -d, клавиши со стрелками работают (т. е. установка исправила это только для этого perl).

Как заставить отладчик работать под perlbrew?

В качестве последней попытки в моей среде perlbrew я попробовал cpanm Term::ReadLine::Gnu, но получил ошибку

Не удалось найти ни libtermcap.a, ни libncurses.a, ни libcurses.

Я мог бы начать устанавливать больше библиотек, но мне кажется, что я упускаю что-то еще, так как проблема затрагивает только Perlbrew.


person Randall    schedule 18.07.2016    source источник
comment
Вы не пропустите что-то еще. Это влияет только на perlbrew, потому что на вашем perlbrew perl не установлен Term::Readline::Gnu.   -  person ThisSuitIsBlackNot    schedule 18.07.2016
comment
ОК, верно (подтверждено, что он установлен под /usr/lib/perl5 от libterm-readline-gnu-perl). Но тогда почему ошибки cpanm под perlbrew? То есть, почему он работает под /usr/bin/perl -d без установки этих библиотек?   -  person Randall    schedule 18.07.2016
comment
Эта ошибка возникает, когда библиотеки не могут быть найдены в $Config{libpath}. Запустите perl -MConfig -le'print $Config{libpth}', чтобы увидеть, в каких каталогах выполняется поиск. Либо библиотеки установлены, но ваш perlbrew perl ищет в неправильных каталогах, либо библиотеки не установлены, но связаны статически в libterm-readline-gnu-perl.   -  person ThisSuitIsBlackNot    schedule 18.07.2016
comment
Ах, я не думал о статической привязке. Это должно быть так; find не возвращает результатов ни для одного из имен библиотек. Perlbrew $Config{libpath} выполняет поиск во множестве каталогов /usr/bin/perl.   -  person Randall    schedule 18.07.2016
comment
Он работает только для вашей системы Perl, потому что вы установили модуль только для вашей системы Perl.   -  person ikegami    schedule 19.07.2016


Ответы (2)


Модули Perl, установленные через систему пакетов вашего дистрибутива, доступны только в Perl из вашего дистрибутива (т.е. /usr/bin/perl). Другие установки perl (например, управляемые perlbrew) не затрагиваются. Вот почему другие перлы не видят Term::ReadLine::Gnu.

Установка Term::ReadLine::Gnu из среды perlbrew (например, через cpan или cpanm) является правильным решением. Ошибка, которую вы получаете, вероятно, вызвана отсутствием заголовков разработки (Term::ReadLine::Gnu является оболочкой для библиотеки readline C, поэтому для сборки требуются заголовки). Попробуйте установить ncurses-dev (с aptitude), затем снова запустите cpanm.

person melpomene    schedule 18.07.2016
comment
‹вздох› Ад зависимостей: rlver.c:3:31: fatal error: readline/readline.h: No such file or directory Но именно поэтому я хотел сначала убедиться, что не пропустил что-то еще :-) - person Randall; 18.07.2016

Установка пакетов, которые предлагает @melpomene, помогает.

Но я нашел другое решение, которое не требует пакетов dev (и, следовательно, не требует root). Любой из следующих пакетов CPAN можно использовать отдельно:

  • Term::ReadLine::Perl (Perl-реализация библиотек Readline)
  • Term::Readline::Zoid (Чистая реализация библиотек Readline на Perl)

Поскольку Perlbrew иногда (часто?) используется в средах, где у вас нет root, это, вероятно, более удобное решение.

person Randall    schedule 19.07.2016