it-swarm-ru.tech

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

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

246
ibz

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

Perl -de1

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

275
Daniel Papasian

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

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

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

59
Dave Rolsky

Я написал скрипт, который я называю "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
34
raldi

Если вы хотите историю, используйте 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> 
22
Ján Sáreník

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

  • Мэтт Траут имеет статья , которая описывает, как написать один
  • Адриано Феррейра описал несколько вариантов
  • и, наконец, вы можете зайти на IRC на irc.Perl.org и попробовать один из самых популярных ботов во многих популярных каналах. Они оценят куски Perl, которые вы им передадите.
20
amoore

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

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

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

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

19
Jon Ericson

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

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

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

15
Frank Wiles

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

   Perl -d -e 1
14
Clinton Pierce

Я создал 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.

11
mklement0

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

11
Eric Johnson

Perl -d ваш друг:

% Perl -de 0
6
Brian Phillips

re.pl от Devel :: REPL

6
Johny

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

$ Perl -e'while(<>){print eval,"\n"}'
5
KIM Taegyoon

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

Perl -wlne'eval;[email protected][email protected]'

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

Perl -wnE'say eval()//[email protected]'
5
ysth

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

Есть также несколько опций для Perl Shell .

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

4
Michael Carman

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

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

3
shelfoo

Под Debian/Ubuntu:

$ Sudo apt-get install libdevel-repl-Perl
$ re.pl

$ Sudo apt-get install libapp-repl-Perl
$ iperl
3
gavenkoa

Обновление: с тех пор я создал загружаемую 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, чтобы напечатать результат выражения.


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

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

Если вы установите модуль 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]'\'

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

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

1
Davor Cubranic

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

0
Johny

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

0
Johny

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

0
runrig