Каковы недостатки использования отладчика Perl по сравнению с реальным REPL, таким как Devel :: REPL? - PullRequest
6 голосов
/ 08 сентября 2010

Я обычно использую perl -de 42 для получения интерактивной оболочки Perl. Я видел Devel :: REPL , и я видел некоторые блоги вроде http://www.xenoterracide.com/2010/07/making-repl-usable.html, объясняющие, как вы можете улучшить Devel::REPL с помощью плагинов, но я еще не использовал.

Не слишком ли плохо использовать отладчик в качестве интерактивной оболочки? Почему?

Примечание: недостатки, упомянутые в этом узле PerlMonks , были ограничениями пользователя, а не отладчика Perl.

Где я могу прочитать больше о Perl REPL?

Готов ли Devel :: REPL для внимания?

UPDATE: Я принял ответ Pedro, потому что он ответил на вопрос, который я задал, но все же я хотел бы знать, когда и почему (если есть) использование отладчика Perl в качестве интерактивной оболочки - плохая идея по сравнению с одной из реализаций Perl REPL , А какой Perl REPL вы предпочитаете?

Ответы [ 3 ]

8 голосов
/ 08 сентября 2010

Одним из недостатков perl -d является то, что лексические переменные немедленно выходят из области видимости.Пример:

DB<1> my $p = 123;

DB<2> print $p;

DB<3>

From perldebug :

Обратите внимание, что указанный eval связан неявной областью действия.В результате любая вновь введенная лексическая переменная или любое модифицированное содержимое буфера захвата теряется после оценки.Отладчик - хорошая среда для изучения Perl, но если вы в интерактивном режиме экспериментируете с материалом, который должен быть в той же области, поместите его в одну линейную область, поместите в одну строку.

3 голосов
/ 08 сентября 2010

Вместо того, чтобы использовать отладчик и упустить функции, я склонен использовать только

perl -wnE'say eval()//$@'

Я использовал Devel :: REPL и мне это нравится, но я никогда не привык к его использованию.

Преимуществом использования отладчика является возможность $DB::single=1 для остановки и пошаговое выполнение в заданной точке.

1 голос
/ 09 сентября 2010

Оба имеют разные цели. Отладчик оптимизирован для отладки уже написанного Perl-скрипта / программы. Принимая во внимание, что основная задача REPL заключается в обеспечении быстрой языковой обратной связи и оптимизирована для интерактивного ввода (разработчиками).

Например, Если я сделаю следующее в отладчике Perl:

DB<1> for my $x (1..10) {

Я получаю Missing right curly or square bracket at (eval 5)... ошибку.

Принимая во внимание, что Devel::REPL допускает многострочный ввод:

$ for my $x (1..3) {
> say $x;
> }
1
2
3

Я настоятельно рекомендую Devel::REPL, и с дополнительными плагинами он становится удобным инструментом разработки для запуска рядом с вашим редактором.

/ I3az /

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...