Как запустить интерактивную консоль для Perl?



Как я могу запустить интерактивную консоль для Perl, похожие на irb команда для Ruby или python для Python?

754   22  

22 ответов:

вы можете использовать отладчик perl для тривиальной программы, например:

perl -de1

кроме того есть Alexis Sukriehконсоль Perl приложение, но я его не использовал.

мало того, что Мэтт Траут написал статью о REPL, он на самом деле написал один - Devel:: 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

Я использую командную строку в консоли:

$ perl -e 'print "JAPH\n"'

затем я могу использовать Баш история, чтобы вернуть старые команды. Однако это не сохраняет состояние.

эта форма наиболее полезна, когда вы хотите проверить "одну маленькую вещь" (например, при ответе на вопросы Perl). Часто я нахожу, что эти команды дословно очищаются в сценарии оболочки или makefile.

Я думаю, что вы спрашиваете о интерфейсе REPL (Read, Evaluate, Print, Loop) для 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", чтобы узнать об этом.

после небольшого поиска в Google есть отдельный проект, который реализует консоль Perl, которую вы можете найти по адресу http://www.sukria.net/perlconsole.html.

надеюсь, что это помогает!

вы всегда можете просто зайти во встроенный отладчик и запустить оттуда команды.

   perl -d -e 1

есть два популярных Perl REPLs.
1. Devel:: REPL - это здорово.
2. Но ИМО ответ - это лучше.

Я создал perli, a Perl REPL что работает на Linux, OS X и Windows.

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

он работает автономной (не имеет никаких зависимостей, кроме самого Perl), но установка rlwrap рекомендуется чтобы поддерживать редактирование командной строки, постоянную историю команд и tab-завершение-подробнее здесь.

установка

  • если у вас есть узел.Яш установлено:

    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 не имеет консоли, но отладчик может быть использован как один. В командной строке введите perl -de 1. (Значение " 1 " не имеет значения, это просто действительное утверждение, которое ничего не делает.)

есть также несколько вариантов для Perl shell.

подробнее perlfaq3.

Read-eval-print loop:

$ perl -e'while(<>){print eval,"\n"}'

вы можете посмотреть в psh здесь:http://gnp.github.io/psh/

Это полная оболочка (вы можете использовать ее вместо bash, например), но использует синтаксис perl.. так что вы можете создать методы на лету и т. д.

обновление: с тех пор я создал загружаемый REPL - см. мой другой ответ.

с выгодой непредусмотрительности:

  • The сторонние решения упоминается среди существующих ответов, либо громоздко устанавливать и/или не работать без нетривиальных, неочевидных дополнительных шагов - некоторые решения, по-видимому, по крайней мере наполовину заброшены.
  • полезный REPL требуется библиотека readline для поддержки клавиатуры редактирования командной строки и поддержки истории - обеспечение этого является проблемным местом для многих сторонних решений.
  • если вы устанавливаете CLI rlwrap, который обеспечивает поддержку readline для любой команды, вы можете объединить его с простой командой Perl для создания полезного REPL, и таким образом делают обойтись без сторонних решений REPL.
    • на OSX, вы можете установить rlwrap через доморощенного С brew install rlwrap.
    • дистрибутивы Linux должны предложить rlwrap через соответствующие менеджеры пакетов; например, на Ubuntu используйте sudo apt-get install rlwrap.
    • посмотреть ответ Яна Сареника для сочетания rlwrap и команда Perl.

чего ты не получишь С ответом Яна это:

  • автозаполнение
  • возможность ввода многострочных заявления

единственное стороннее решение, которое предлагает эти (с нетривиальной установкой + дополнительные, неочевидные действия), составляет ПШ, но:

  • он не видел активности в течение примерно 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

как и с ответом Яна,скаляр результат выражения автоматически printed; например:

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

Sepia и PDE также имеют собственные REPLs (для GNU Emacs).

см. также стильный REPL (для GNU Emacs)http://blog.jrock.us/articles/Stylish%20REPL.pod

Comments

    Ничего не найдено.