Как запустить интерактивную консоль для Perl?
Как я могу запустить интерактивную консоль для Perl, аналогичную irb
команда для Ruby или python
для Python?
22 ответов
вы можете использовать отладчик perl в тривиальной программе, например:
perl -de1
кроме того есть Алексис Sukriehконсоль Perl приложение, но я его не использовал.
Мэтт Траут не только написал статью о РЕПЛЕ, он даже написал одну - Devel:: REPL
Я использовал его немного, и он работает довольно хорошо, и он находится в активной разработке.
кстати, я понятия не имею, почему кто-то смоделировал человека, который упомянул использование "perl-e" с консоли. Это не совсем РЕПЛ, правда, но он фантастически полезен, и я использую его все время.
Я написал сценарий, который я называю "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
Я использую командную строку в консоли:
$ perl -e 'print "JAPH\n"'
затем я могу использовать Баш история, чтобы вернуть старые команды. Однако это не сохраняет состояние.
эта форма наиболее полезна, когда вы хотите проверить "одну маленькую вещь" (например, при ответе на вопросы Perl). Часто я нахожу, что эти команды скребут дословно в сценарий оболочки или makefile.
Я думаю, вы спрашиваете о интерфейсе REPL (чтение, оценка, печать, цикл) для perl. Есть несколько способов сделать это:
- Мэтт Кумжа статьи, который описывает, как написать
- Адриано Феррейра описал некоторые варианты
- и, наконец, вы можете прыгать на IRC на irc.perl.org и попробуйте один из ботов eval во многих популярных каналах. Они будут оценивать куски perl, которые вы передаете их.
Если вы хотите историю, использовать 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>
нет интерактивной консоли для Perl, встроенной, как Python. Однако вы можете использовать отладчик Perl для отладки связанных вещей. Вы включаете его с опцией-d, но вы можете проверить "man perldebug", чтобы узнать об этом.
после немного гуглить, есть отдельный проект, который реализует консоль Perl, который вы можете найти на http://www.sukria.net/perlconsole.html.
надеюсь, что это помогает!
есть два популярных Perl REPLs.
1. Devel:: REPL - это здорово.
2. Но ИМО!--5-->ответ - это лучше.
Я создал perli
, a Perl REPL что работает на Linux, OS X и Windows.
свой фокус автоматическое печатание результата, удобные поиски документации, и легкий
проверка соответствия регулярных выражений.
Вы можете увидеть скриншоты здесь.
он работает автономной (не имеет никаких зависимостей, кроме самого Perl), но установка rlwrap
рекомендуется чтобы поддерживать редактирование командной строки, постоянную историю команд и вкладку-завершение - подробнее здесь.
установка
-
если у вас есть узел.Яш установлено:
npm install -g perli
-
иначе:
в Unix - подобные платформы: скачать этот скрипт as
perli
в папку в пути вашей системы и сделать его исполняемым с помощьюchmod +x
.Windows скачать этот скрипт as
perli.pl
(обратите внимание на.pl
extension) в папку в пути вашей системы.
Если вы не против вызвать Perli какperli.pl
, все готово.
В противном случае, создайте пакетный файл с именемperli.cmd
в той же папке со следующим содержимым:@%~dpn.pl %*
; это позволяет вызывать как разperli
.
Я всегда делал так:
perl -wlne'eval;print$@if$@'
С 5.10, я переключился на:
perl -wnE'say eval()//$@'
Perl не имеет консоли, но отладчик можно использовать как один. В командной строке введите perl -de 1
. (Значение " 1 " не имеет значения, это просто действительное утверждение, которое ничего не делает.)
есть также несколько вариантов для Perl shell.
подробнее perlfaq3.
вы можете посмотреть в psh здесь:http://gnp.github.io/psh/
Это полная оболочка (вы можете использовать ее вместо bash, например), но использует синтаксис perl.. таким образом, вы можете создавать методы на лету и т. д.
обновление: с тех пор я создал загружаемый REPL - см. мой другой ответ.
С оглядкой на прошлое:
- на сторонние решения упоминается среди существующих ответов, либо громоздко устанавливать и / или не работать без нетривиальных, неочевидных дополнительных шагов - некоторые решения, по-видимому, по крайней мере наполовину заброшены.
- полезный REPL нужна библиотека readline для поддержки клавиатуры редактирования командной строки и поддержки истории - обеспечение этого является проблемным местом для многих сторонних решений.
- если вы устанавливаете CLI
rlwrap
, который обеспечивает поддержку readline для любой команды, вы можете объединить его с простой командой Perl, чтобы создать полезный REPL, и таким образом обойтись без сторонних решений REPL.- на OSX, вы можете установить
rlwrap
via доморощенного Сbrew install rlwrap
. - дистрибутивы Linux должны предложить
rlwrap
через их соответствующие менеджеры пакетов; например, на Ubuntu используйтеsudo apt-get install rlwrap
. - посмотреть ответ Яна Сареника для сочетания
rlwrap
и команда Perl.
- на OSX, вы можете установить
чего не получишь С ответом Яна это:
- автозаполнение
- возможность ввода многострочных заявления
единственное стороннее решение, которое предлагает эти (с нетривиальной установкой + дополнительные, неочевидные действия), составляет psh, но:
он не видел активности около 2,5 лет
его фокус отличается тем, что он стремится быть полноценным замена раковины, и, таким образом, работает как традиционная оболочка, что означает, что она не автоматически оцените команду как Perl оператор и требует явной команды вывода, такой как
print
для печати результата выражения.
ответ Яна Сареника можно улучшить одним способом:
- по умолчанию печатает массивы / списки / хэш-таблицы как скаляры, то есть, только печатает их графа элемент, тогда как было бы удобно перечислить их вместо элементов.
при установке 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()//$@'\'
например, затем вы можете сделать следующее, чтобы напечатать все переменные среды через 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
В Debian / Ubuntu:
$ sudo apt-get install libdevel-repl-perl
$ re.pl
$ sudo apt-get install libapp-repl-perl
$ iperl
Мэтт Траута!--5-->обзор перечисляет пять вариантов, от perl -de 0
вперед, и он рекомендует Reply
, если важна расширяемость через плагины, или tinyrepl
С Eval::WithLexicals
, для минимального решения pure-perl, которое включает поддержку readline и лексическое постоянство.
также ищите ptkdb на CPAN: http://search.cpan.org/search?query=ptkdb&mode=all
см. также стильный REPL (для GNU Emacs)http://blog.jrock.us/articles/Stylish%20REPL.pod