Обновление: с тех пор я создал загружаемый 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()
, для которой вы может передавать списки / массивы / хеш-таблицы для перечисления.
Вот псевдоним с именем 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()//$@'\'
Например, вы можете сделать следующее, чтобы распечатать все переменные окружения через хеш-таблицу %ENV
:
$ iperl # start the REPL
iperl> p %ENV # print key-value pairs in hashtable %ENV
Как и в ответе Яна, скалярное результат выражения автоматически печатается; e.g.:
iperl> 22 / 7 # automatically print scalar result of expression: 3.14285714285714