Может ли отладчик Perl сохранить историю ReadLine в файл?

Я немного работаю с lib ReadLine и lib Perl Readline.

Тем не менее, отладчик Perl отказывается сохранять историю командной строки сеанса.

Таким образом, каждый раз, когда я вызываю отладчик, я теряю всю свою предыдущую историю.

Кто-нибудь знает, как сохранить отладчик Perl и, надеюсь, добавить историю сеансов, аналогичную bash HISTORYFILE ?


person bitbucket    schedule 21.06.2011    source источник
comment
просто для тех, кто ищет это: для того, чтобы readline работал в perl (ctrl-p / ctrl-n / ...), нужно apt-get install libterm-readline-gnu-perl (по крайней мере, в debian)   -  person eli    schedule 07.06.2018


Ответы (3)


Я делаю это с помощью следующей строки в моем файле ~/.perldb:

&parse_options("HistFile=$ENV{HOME}/.perldb.hist");

После этого команды отладчика сохраняются в ~/.perldb.hist и доступны между сеансами.

person mirod    schedule 22.06.2011

Добавьте parse_options("TTY=/dev/stdin ReadLine=0"); в .perldb, затем:

rlwrap -H .perl_history perl -d ...
person ysth    schedule 22.06.2011
comment
@bitbucket: в прошлом у меня было достаточно проблем с работой встроенной поддержки readline, поэтому я больше не беспокоюсь :) - person ysth; 22.06.2011
comment
Что здесь делает ReadLine=0?if false, a dummy ReadLine is used, so you can debug ReadLine applications., этот документ не имеет для меня особого смысла... - person new_perl; 13.07.2011
comment
запрещает отладчику использовать строку чтения, даже если установлены соответствующие модули; полезно в случае, когда программа, которую вы отлаживаете, пытается использовать строку чтения, что может привести к конфликту (или, как в этом случае, когда вы используете внешнюю строку чтения) - person ysth; 13.07.2011
comment
Как я могу вводить команды в отладчик Perl, если он изначально не readline? - person new_perl; 13.07.2011
comment
Не функция readline-the-perl, а readline-the-library, которая предоставляет расширенные функции, такие как возможность использовать стрелки вверх и вниз в строке ввода для прокрутки ваших прошлых записей. - person ysth; 13.07.2011
comment
Term::ReadLine::GNU segfaults, если я использую пейджер (полезно для больших переменных, проверьте с помощью подобных |o). Term::ReadLine::Perl работает с пейджером, но ни пакеты GNU, ни Perl не сохраняют историю между потоками, поэтому я считаю их бесполезными. rlwrap, наконец, решил эту проблему для меня. Благодарность - person elbeardmorez; 25.02.2013

Я сделал следующее:

1) Создал ~/.perldb, которого раньше не было.

2) Добавлено &parse_options("HistFile=$ENV{HOME}/.perldb.hist"); из ответа Мирода.

3) Добавлено export PERLDB_OPTS=HistFile=$HOME/.perldb.history в ~/.bashrc из ответа mephinet.

4) Побежал source .bashrc

5) Запустил perl -d my program.pl и получил это предупреждение/ошибку

perldb: Must not source insecure rcfile /home/ics/.perldb.
        You or the superuser must be the owner, and it must not 
        be writable by anyone but its owner.

6) Я защитил ~/.perldb с владельцем rw chmod 700 ~/.perldb, и ошибка исчезла.

person octopusgrabbus    schedule 14.11.2013