Вопрос

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

Это было полезно?

Решение

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

perl -de1

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

Другие советы

Мэтт Траут не только написал статью о REPL, он действительно написал ее - Разработка::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

Если вам нужна история, используйте 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> 

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

  • У Мэтта Траута есть статья это описывает, как его написать
  • Adriano Ferreira описал несколько вариантов
  • и, наконец, вы можете перейти на IRC по адресу irc.perl.org и опробовать одного из ботов-оценщиков на многих популярных каналах.Они будут оценивать фрагменты perl, которые вы им передаете.

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

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

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

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

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

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

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

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

   perl -d -e 1

Существует два популярных варианта ответа Perl.
1. Разработка::REPL это здорово.
2.Но ИМО Ответить это лучше.

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

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

% perl -de 0

re.pl из Devel::REPL

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

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

С 5.10 я перешел на:

perl -wnE'say eval()//$@'

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

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

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

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

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

Вы могли бы заглянуть в psh здесь: http://gnp.github.io/psh/

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

Под управлением Debian/Ubuntu:

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

$ sudo apt-get install libapp-repl-perl
$ iperl

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

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

  • Тот Самый сторонние решения среди существующих ответов упоминаются либо громоздки в установке и / или не работают без нетривиальных, неочевидных дополнительных шагов - некоторые решения кажутся, по крайней мере, наполовину заброшенными.
  • Пригодный к использованию REPL нуждается в библиотеке readline для редактирования командной строки, поддержки клавиатуры и истории - обеспечение этого является проблемным местом для многих сторонних решений.
  • Если вы установите CLI rlwrap, который обеспечивает поддержку readline для любой команды, вы можете объединить его с простой командой Perl для создания пригодного для использования REPL, и, таким образом, обходиться без сторонних REPL-решений.
    • В OSX вы можете установить rlwrap через Домашнее пиво с brew install rlwrap.
    • Дистрибутивы Linux должны предлагать rlwrap через их соответствующих менеджеров пакетов;например, в Ubuntu используйте sudo apt-get install rlwrap.
    • Видишь Ján Sáreník's answer для указанной комбинации rlwrap и команда Perl.

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

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

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

  • он не проявлял активности примерно 2,5 года

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


Ján Sáreník's answer может быть улучшен одним способом:

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

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

Вот пример названный псевдоним iperl с помощью строки чтения и 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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top