Как я могу запустить интерактивную консоль для Perl?
-
09-06-2019 - |
Вопрос
Как я могу запустить интерактивную консоль для Perl, аналогичную irb
команда для Ruby или python
для Python?
Решение
Вы можете использовать отладчик perl для тривиальной программы, например:
perl -de1
В качестве альтернативы есть Алексис СукриеКонсоль Perl приложение, но я им не пользовался.
Другие советы
Мэтт Траут не только написал статью о REPL, он действительно написал ее - Разработка::REPL
Я немного использовал его, и он работает довольно хорошо, и находится в активной разработке.
Кстати, я понятия не имею, почему кто-то изменил человека, который упомянул использование "perl -e" с консоли.Это, правда, не совсем REPL, но он фантастически полезен, и я использую его постоянно.
Я написал сценарий, который называю "psh".:
#! /usr/bin/perl
while (<>) {
chomp;
my $result = eval;
print "$_ = $result\n";
}
Что бы вы ни вводили, оно вычисляется на Perl:
> gmtime(2**30)
gmtime(2**30) = Sat Jan 10 13:37:04 2004
> $x = 'foo'
$x = 'foo' = foo
> $x =~ s/o/a/g
$x =~ s/o/a/g = 2
> $x
$x = faa
Если вам нужна история, используйте rlwrap ( обертка ).Это могло бы быть вашим ~/bin/ips
например:
#!/bin/sh
echo 'This is Interactive Perl shell'
rlwrap -A -pgreen -S"perl> " perl -wnE'say eval()//$@'
И вот как это выглядит:
$ ips
This is Interactive Perl shell
perl> 2**128
3.40282366920938e+38
perl>
Я думаю, вы спрашиваете об интерфейсе REPL (Чтение, оценка, печать, Цикл) для perl.Есть несколько способов сделать это:
- У Мэтта Траута есть статья это описывает, как его написать
- Adriano Ferreira описал несколько вариантов
- и, наконец, вы можете перейти на IRC по адресу irc.perl.org и опробовать одного из ботов-оценщиков на многих популярных каналах.Они будут оценивать фрагменты perl, которые вы им передаете.
Я использую командную строку в качестве консоли:
$ perl -e 'print "JAPH\n"'
Тогда я смогу использовать свой удар история, чтобы вернуть старые команды.Однако это не сохраняет состояние.
Эта форма наиболее полезна, когда вы хотите протестировать "одну маленькую вещь" (например, при ответе на вопросы Perl).Часто я обнаруживаю, что эти команды дословно записываются в сценарий оболочки или makefile.
В Perl нет встроенной интерактивной консоли, как в Python.Однако вы можете использовать отладчик Perl для выполнения связанных с отладкой задач.Вы включаете его с помощью опции -d, но, возможно, вам захочется проверить "man perldebug", чтобы узнать о нем больше.
После небольшого поиска в Google появился отдельный проект, реализующий консоль Perl, который вы можете найти по адресу http://www.sukria.net/perlconsole.html.
Надеюсь, это поможет!
Вы всегда можете просто зайти во встроенный отладчик и запускать команды оттуда.
perl -d -e 1
Существует два популярных варианта ответа Perl.
1. Разработка::REPL это здорово.
2.Но ИМО Ответить это лучше.
Я создал perli
, а Perl REPL это продолжается Linux, macOS и Windows.
Ее фокус автоматически результате печати, удобный поиск документации, и легко
проверка регулярных выражений матчей.
Вы можете посмотреть скриншоты здесь.
Это работает автономный (не имеет никаких зависимостей, кроме самого Perl), но установка rlwrap
настоятельно рекомендуется чтобы поддерживать редактирование командной строки, постоянную историю команд и завершение работы с вкладками - подробнее здесь.
Установка
Если вы случайно установили Node.js :
npm install -g perli
В противном случае:
Unix-подобные платформы:Скачать этот сценарий как
perli
перейдите в папку по пути к вашей системе и сделайте ее исполняемой с помощьюchmod +x
.Windows:Скачать этот сценарий как
perli.pl
(обратите внимание на.pl
расширение) к папке в вашем системном пути.
Если вы не возражаете, вызовите Perli какperli.pl
, - у вас все готово.
В противном случае создайте пакетный файл с именемperli.cmd
в той же папке со следующим содержимым:@%~dpn.pl %*
;это позволяет вызывать как простоperli
.
perl -d
это твой друг:
% perl -de 0
re.pl из Devel::REPL
Я всегда так делал:
perl -wlne'eval;print$@if$@'
С 5.10 я перешел на:
perl -wnE'say eval()//$@'
Цикл чтения-оценки-печати:
$ perl -e'while(<>){print eval,"\n"}'
В Perl нет консоли, но отладчик можно использовать как таковой.В командной строке введите perl -de 1
.(Значение "1" не имеет значения, это просто допустимое утверждение, которое ничего не делает.)
Есть также несколько вариантов для Оболочка Perl.
Для получения дополнительной информации читайте perlfaq3.
Вы могли бы заглянуть в psh здесь: http://gnp.github.io/psh/
Это полноценная оболочка (вы можете использовать ее, например, вместо bash), но использует синтаксис perl..таким образом, вы можете создавать методы "на лету" и т.д.
Под управлением Debian/Ubuntu:
$ sudo apt-get install libdevel-repl-perl
$ re.pl
$ sudo apt-get install libapp-repl-perl
$ iperl
Обновить:С тех пор я создал загружаемый REPL - смотрите мой другой ответ.
Оглядываясь назад:
- Тот Самый сторонние решения среди существующих ответов упоминаются либо громоздки в установке и / или не работают без нетривиальных, неочевидных дополнительных шагов - некоторые решения кажутся, по крайней мере, наполовину заброшенными.
- Пригодный к использованию REPL нуждается в библиотеке readline для редактирования командной строки, поддержки клавиатуры и истории - обеспечение этого является проблемным местом для многих сторонних решений.
- Если вы установите CLI
rlwrap
, который обеспечивает поддержку readline для любой команды, вы можете объединить его с простой командой Perl для создания пригодного для использования REPL, и, таким образом, обходиться без сторонних REPL-решений.- В OSX вы можете установить
rlwrap
через Домашнее пиво сbrew install rlwrap
. - Дистрибутивы Linux должны предлагать
rlwrap
через их соответствующих менеджеров пакетов;например, в Ubuntu используйтеsudo apt-get install rlwrap
. - Видишь Ján Sáreník's answer для указанной комбинации
rlwrap
и команда Perl.
- В OSX вы можете установить
Чего вы НЕ получаете с ответом Яна:
- автоматическое завершение
- возможность ввода многострочных инструкций
Единственным сторонним решением, которое предлагает это (с нетривиальной установкой + дополнительными, неочевидными шагами), является пш, но:
он не проявлял активности примерно 2,5 года
его направленность отличается тем, что он стремится стать полноценным замена корпуса, и, таким образом, работает как традиционная оболочка, что означает, что она не оценивает команду автоматически как Perl оператор, и требует явной команды вывода, такой как
print
чтобы вывести результат выполнения выражения.
Ján Sáreník's answer может быть улучшен одним способом:
- По умолчанию это выводит массивы / списки / хэш-таблицы в виде скаляры, то есть печатает только их количество элементов, тогда как вместо этого было бы удобно перечислить их элементы.
Если вы установите Data::Printer
модуль с [sudo] cpan Data::Printer
в качестве одноразовой операции вы можете загрузить ее в REPL для использования p()
функция, которой вы можете передавать списки/ массивы / хэш-таблицы для перечисления.
Вот пример названный псевдоним iperl
с помощью строки чтения и Data::Printer
Поддержка, который вы можете поместить в файл инициализации вашей POSIX-подобной оболочки (например, ~/.bashrc
):
alias iperl='rlwrap -A -S "iperl> " perl -MData::Printer -wnE '\''BEGIN { say "# Use `p @<arrayOrList>` or `p %<hashTable>` to print arrays/lists/hashtables; e.g.: `p %ENV`"; } say eval()//$@'\'
Например, затем вы можете сделать следующее, чтобы распечатать все переменные среды через hashtable %ENV
:
$ iperl # start the REPL
iperl> p %ENV # print key-value pairs in hashtable %ENV
Как и в случае с ответом Яна, скалярный результатом выражения является автоматически напечатанный;например ,:
iperl> 22 / 7 # automatically print scalar result of expression: 3.14285714285714
У Мэтта Траута Обзор перечисляет пять вариантов, начиная с perl -de 0
далее, и он рекомендует Reply
, если важна расширяемость с помощью плагинов, или tinyrepl
От Eval::WithLexicals
, для минимального решения на чистом perl, которое включает поддержку readline и лексическую персистентность.
Также ищите ptkdb в CPAN:http://search.cpan.org/search ?запрос=ptkdb&mode= все
Sepia и PDE также имеют собственные реплики (для GNU Emacs).
Смотрите также Стильный REPL (для GNU Emacs) http://blog.jrock.us/articles/Stylish%20REPL.pod