Как запустить интерактивную консоль для Perl, аналогичную команде irb
для Ruby или python
для Python?
Как запустить интерактивную консоль для Perl?
Ответ 1
Вы можете использовать отладчик perl в тривиальной программе, например:
perl -de1
Альтернативно там приложение Alexis Sukrieh Perl Console, но я не использовал его.
Ответ 2
Мало того, что Мэтт Траут написал статью о REPL, он на самом деле написал один - Devel:: REPL
Я использовал его немного, и он работает достаточно хорошо, и он находится в активной разработке.
Кстати, я не знаю, почему кто-то изменил человека, который упомянул использование "perl -e" с консоли. Это не REPL, правда, но это фантастически полезно, и я использую его все время.
Ответ 3
Я написал script я называю "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
Ответ 4
Если вы хотите историю, используйте rlwrap. Это может быть ваш ~/bin/ips
, например:
#!/bin/sh
echo 'This is Interactive Perl shell'
rlwrap -A -pgreen -S"perl> " perl -wnE'say eval()//[email protected]'
И вот как это выглядит:
$ ips
This is Interactive Perl shell
perl> 2**128
3.40282366920938e+38
perl>
Ответ 5
Я думаю, что вы спрашиваете об интерфейсе REPL (Read, Evaluate, Print, Loop) для Perl. Есть несколько способов сделать это:
- Мэтт Траут имеет статью, которая описывает, как написать один
- Адриано Феррейра описал несколько вариантов
- и, наконец, вы можете перейти на IRC по адресу irc.perl.org и попробовать один из самых популярных ботов на многих популярных каналах. Они оценят куски Perl, которые вы им передадите.
Ответ 6
Я использую командную строку в качестве консоли:
$ perl -e 'print "JAPH\n"'
Затем я могу использовать историю bash для возврата старых команд. Однако это не сохраняет состояние.
Эта форма наиболее полезна, когда вы хотите протестировать "одну мелочь" (например, при ответе на вопросы Perl). Часто я нахожу, что эти команды добираются дословно в оболочку script или makefile.
Ответ 7
Не существует интерактивной консоли для Perl, построенной как Python. Тем не менее, вы можете использовать Perl Debugger для отладки связанных вещей. Вы включаете его с опцией -d, но вы можете проверить "man perldebug", чтобы узнать об этом.
После нескольких поисковых запросов есть отдельный проект, который реализует консоль Perl, которую вы можете найти в http://www.sukria.net/perlconsole.html.
Надеюсь, это поможет!
Ответ 8
Вы всегда можете просто зайти во встроенный отладчик и запустить команды оттуда.
perl -d -e 1
Ответ 9
Есть два популярных Perl REPL.
- Devel :: REPL отлично.
- Но ИМО Ответ лучше.
Ответ 10
Я создал perli
, Perl REPL, который работает на Linux, MacOS и Windows.
Он сфокусирован на автоматической печати результатов, удобном поиске документации и легкой проверке совпадений регулярных выражений.
Вы можете увидеть скриншоты здесь.
Он работает автономно (не имеет никаких зависимостей, кроме самого Perl), но настоятельно рекомендуется установка rlwrap
чтобы поддерживать редактирование командной строки, постоянную историю команд и завершение табуляции - подробнее здесь.
Монтаж
-
Если у вас установлен Node.js:
npm install -g perli
-
Иначе:
-
Unix-подобные платформы: загрузите этот скрипт как
perli
в папку в системном пути и сделайте его исполняемым с помощьюchmod +x
. -
Windows: Загрузите этот скрипт как
perli.pl
(обратите внимание на расширение.pl
) в папку в системном каталоге.
Если вы не возражаете, вызываяperli.pl
какperli.pl
, все готово.
В противном случае создайте пакетный файл с именемperli.cmd
в той же папке со следующим содержимым:@%~dpn.pl %*
; это позволяет вызывать как толькоperli
.
-
Ответ 11
perl -d
- ваш друг:
% perl -de 0
Ответ 12
re.pl из Devel:: REPL
Ответ 13
Я всегда делал:
rlwrap perl -wlne'eval;[email protected][email protected]'
С 5.10 я переключился на:
rlwrap perl -wnE'say eval()//[email protected]'
(rlwrap необязательный)
Ответ 14
Цикл чтения-eval-print:
$ perl -e'while(<>){print eval,"\n"}'
Ответ 15
Вы можете посмотреть здесь psh: http://gnp.github.io/psh/
Это полная оболочка (вы можете использовать ее вместо замены bash), но использует синтаксис perl.. поэтому вы можете создавать методы на лету и т.д.
Ответ 16
Perl не имеет консоли, но отладчик может использоваться как один. В командной строке введите perl -de 1
. (Значение "1" не имеет значения, это просто действительный оператор, который ничего не делает.)
Существует также пара опций оболочка Perl.
Для получения дополнительной информации прочитайте perlfaq3.
Ответ 17
В Debian/Ubuntu:
$ sudo apt-get install libdevel-repl-perl
$ re.pl
$ sudo apt-get install libapp-repl-perl
$ iperl
Ответ 18
Обновление: с тех пор я создал загружаемый REPL - см. мой другой ответ.
В свете ретроспективы:
- сторонние решения, упомянутые среди существующих ответов, либо громоздки для установки и/или не работают без нетривиальных, неочевидных дополнительных шагов - некоторые решения кажутся, по крайней мере, полузаброшенными.
- Используемый REPL нуждается в библиотеке readline для поддержки клавиатуры и поддержки клавиатуры и поддержки истории. Это означает, что это проблема для многих сторонних решений.
- Если вы устанавливаете CLI
rlwrap
, который предоставляет поддержку readline любой команде, вы можете объединить ее с простой командой Perl для создания полезной REPL и, таким образом, обойтись без стороннего REPL решения.- В OSX вы можете установить
rlwrap
через Homebrew с помощьюbrew install rlwrap
. - Linux-дистрибутивы должны предлагать
rlwrap
через своих соответствующих менеджеров пакетов; например, на Ubuntu, используйтеsudo apt-get install rlwrap
. - Обратитесь к Ján Sáreník answer за указанную комбинацию
rlwrap
и команду Perl.
- В OSX вы можете установить
Что вы НЕ получаете с ответом Ján:
- автозаполнения
- возможность ввода многострочных операторов
Единственное стороннее решение, которое предлагает их (с нетривиальной установкой + дополнительные, неочевидные шаги), psh, но:
-
он не видел активности примерно через 2,5 года
-
его фокус отличается тем, что он нацелен на полноценную замену оболочки и, таким образом, работает как традиционная оболочка, а это означает, что она не автоматически оценивает команду как оператор Perl и требует явная команда вывода, такая как
print
, чтобы напечатать результат выражения.
Ответ Ján Sáreník может быть улучшен одним способом:
- По умолчанию он печатает массивы/списки/хеш-таблицы как скаляры, т.е. печатает только их количество элементов, тогда как было бы удобно перечислять их элементы.
Если вы устанавливаете модуль Data::Printer
с [sudo] cpan Data::Printer
как одноразовую операцию, вы можете загрузить его в REPL для использования функции p()
, к которой вы можете передавать списки/массивы/хеш-таблицы для перечисления.
Здесь псевдоним с именем iperl
с readline и 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()//[email protected]'\'
Например, вы можете сделать следующее для печати всех переменных среды через hashtable %ENV
:
$ iperl # start the REPL
iperl> p %ENV # print key-value pairs in hashtable %ENV
Как и в случае ответа Ján, скалярный результат выражения автоматически печатается; например:.
iperl> 22 / 7 # automatically print scalar result of expression: 3.14285714285714
Ответ 19
Matt Trout обзор содержит пять вариантов: от perl -de 0
и далее Reply
, если важна расширяемость через плагины, или tinyrepl
из Eval::WithLexicals
, для минимального, чисто-perl-решение, которое включает поддержку readline и лексическую настойчивость.
Ответ 20
Также смотрите ptkdb на CPAN: http://search.cpan.org/search?query=ptkdb&mode=all
Ответ 21
Сепия и PDE также имеют собственные REPL (для GNU Emacs).
Ответ 22
См. также Стильный REPL (для GNU Emacs) http://blog.jrock.us/articles/Stylish%20REPL.pod