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

perl console interactive read-eval-print-loop

113818 просмотра

22 ответа

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

Автор: ibz Источник Размещён: 24.06.2019 01:23

Ответы (22)


275 плюса

Решение

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

perl -de1

В качестве альтернативы есть консольное приложение Алексиса Сукрие , но я им не пользовался.

Автор: Daniel Papasian Размещён: 16.09.2008 03:38

59 плюса

Мэтт Траут не только написал статью о REPL, но и написал - Devel :: REPL

Я использовал это немного, и это работает довольно хорошо, и это находится в стадии активной разработки.

Кстати, я понятия не имею, почему кто-то модернизировал человека, который упомянул «perl -e» с консоли. Это не совсем REPL, правда, но это фантастически полезно, и я использую его все время.

Автор: Dave Rolsky Размещён: 16.09.2008 04:16

34 плюса

Я написал скрипт, который я называю "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
Автор: raldi Размещён: 16.09.2008 07:44

22 плюса

Если вы хотите историю, используйте 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> 
Автор: Ján Sáreník Размещён: 03.04.2014 02:07

20 плюса

Я думаю, что вы спрашиваете об интерфейсе REPL (Read, Evaluate, Print, Loop) для Perl. Есть несколько способов сделать это:

  • Мэтт Траут имеет статью, которая описывает, как написать один
  • Адриано Феррейра описал несколько вариантов
  • и, наконец, вы можете перейти на IRC по адресу irc.perl.org и попробовать один из самых популярных ботов на многих популярных каналах. Они оценят куски Perl, которые вы им передадите.
Автор: amoore Размещён: 16.09.2008 03:57

19 плюса

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

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

Затем я могу использовать свою историю bash, чтобы вернуть старые команды. Это не сохраняет государство, как бы то ни было.

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

Автор: Jon Ericson Размещён: 16.09.2008 03:42

15 плюса

В Perl нет встроенной интерактивной консоли, как это делает Python. Однако вы можете использовать Perl Debugger для отладки связанных вещей. Вы включаете его с помощью опции -d, но, возможно, захотите проверить 'man perldebug', чтобы узнать об этом.

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

Надеюсь это поможет!

Автор: Frank Wiles Размещён: 16.09.2008 03:38

14 плюса

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

   perl -d -e 1
Автор: Clinton Pierce Размещён: 16.09.2008 03:37

11 плюса

Я создал perli, а REPL Perl , который работает на Linux, MacOS и Windows , .

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

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

Монтаж

  • Если у вас установлен Node.js:

    npm install -g perli
    
  • Иначе:

    • Unix- подобные платформы: загрузите этот скрипт в perliпапку в пути вашей системы и сделайте его исполняемым с chmod +x.

    • Windows : Загрузите этот скрипт как perli.pl(обратите внимание на .plрасширение) в папку в пути к вашей системе.
      Если вы не против вызвать Perli as perli.pl, все готово.
      В противном случае создайте пакетный файл с именем perli.cmdв той же папке со следующим содержимым @%~dpn.pl %*:; это позволяет вызывать как раз perli.

Автор: mklement0 Размещён: 26.09.2015 02:01

11 плюса

Есть два популярных Perl REPL.

  1. Devel :: REPL отлично.
  2. Но ИМО Ответ лучше.
Автор: Eric Johnson Размещён: 06.02.2015 06:49

6 плюса

perl -d твой друг:

% perl -de 0
Автор: Brian Phillips Размещён: 16.09.2008 03:37

6 плюса

re.pl от Devel :: REPL

Автор: Johny Размещён: 17.09.2008 07:45

5 плюса

Я всегда делал:

perl -wlne'eval;print$@if$@'

С 5.10 я переключился на:

perl -wnE'say eval()//$@'
Автор: ysth Размещён: 18.09.2008 10:48

5 плюса

Цикл чтения-проверки-печати:

$ perl -e'while(<>){print eval,"\n"}'
Автор: KIM Taegyoon Размещён: 17.09.2013 07:28

4 плюса

В Perl нет консоли, но отладчик можно использовать как единое целое. В командной строке введите perl -de 1. (Значение «1» не имеет значения, это просто правильное утверждение, которое ничего не делает.)

Есть также несколько вариантов оболочки Perl .

Для получения дополнительной информации читайте perlfaq3 .

Автор: Michael Carman Размещён: 16.09.2008 03:46

3 плюса

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

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

Автор: shelfoo Размещён: 16.09.2008 03:44

3 плюса

Под Debian / Ubuntu:

$ sudo apt-get install libdevel-repl-perl
$ re.pl

$ sudo apt-get install libapp-repl-perl
$ iperl
Автор: gavenkoa Размещён: 05.03.2016 02:56

2 плюса

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

Оглядываясь назад:

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

Что вы НЕ получите с ответом Яна:

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

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

  • он не видел активности около 2,5 лет

  • ее фокус отличается тем , что она стремится стать полноценной заменой корпуса , и , таким образом , работает как традиционная оболочки, что означает , что он не будет автоматически оценивать команду как Perl заявление, и требует явной команды вывода , таких как printк распечатать результат выражения.


Ответ Яна Шареника можно улучшить одним способом:

  • По умолчанию он печатает массивы / списки / хеш-таблицы как скаляры , т. Е. Печатает только их количество элементов , тогда как вместо этого было бы удобно перечислять их элементы.

Если вы устанавливаете Data::Printerмодуль [sudo] cpan Data::Printerкак одноразовую операцию, вы можете загрузить его в REPL для использования p()функции, которой вы можете передать списки / массивы / хеш-таблицы для перечисления.

Вот псевдоним с именем iperlreadline и 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()//$@'\'

Например, вы можете сделать следующее, чтобы напечатать все переменные окружения через хеш-таблицу %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
Автор: mklement0 Размещён: 08.07.2015 03:55

1 плюс

Обзор Мэтта Траута содержит пять вариантов, perl -de 0и он рекомендует Reply, если важна расширяемость с помощью плагинов, или tinyreplот Eval::WithLexicals, для минимального, чисто Perl-решения, которое включает поддержку readline и лексическое постоянство.

Автор: Davor Cubranic Размещён: 31.05.2016 05:11

0 плюса

Также ищите ptkdb на CPAN: http://search.cpan.org/search?query=ptkdb&mode=all

Автор: runrig Размещён: 16.09.2008 03:53

0 плюса

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

Автор: Johny Размещён: 17.09.2008 07:47

0 плюса

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

Автор: Johny Размещён: 18.09.2008 05:54
Вопросы из категории :
32x32