Ответы:
Вы можете использовать отладчик perl в простой программе, например:
perl -de1
В качестве альтернативы есть консольное приложение Алексиса Сукрие , но я им не пользовался.
control
+ L
не работает в этом командном интерфейсе, как мне обновить экран?
rlwrap
). Все сторонние решения REPL / консоли, в том числе perlconsole
, сложны в установке и часто имеют больше ограничений.
perl -de1
похоже, что my
переменные не поддерживаются , и хеши по какой-то причине тоже не работают ...
perlconsole
не страдает от этих проблем.
Мэтт Траут не только написал статью о REPL, но и написал одну - Devel :: REPL
Я использовал это немного, и это работает довольно хорошо, и это находится в стадии активной разработки.
Кстати, я понятия не имею, почему кто-то модернизировал человека, который упомянул «perl -e» с консоли. Это не совсем REPL, правда, но это фантастически полезно, и я использую его все время.
[sudo] cpan Devel::REPL
не работал для меня, ни в OSX 10.10 (Perl 5.18.2), ни в Ubuntu 14.04 (Perl 5.18.2): я получаю ошибки времени выполнения с жалобами на отсутствующие модули; установил один, затем сдался после того, как другой пропавший модуль был сообщен.
re.pl
автор, написал статью, в которой перечислены несколько альтернатив, и он сам предлагает reply
вместо re.pl
: shadow.cat/blog/matt-s-trout/mstpan-17
Я написал скрипт, который я называю "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>
alias iperl='rlwrap -A -S "perl> " perl -wnE '\''say eval()//$@'\'
. Пользователи OSX могут установить rlwrap
через Homebrew с brew install rlwrap
.
rlwrap -A -pgreen -S'perl> ' perl -MData::Dumper -wnE'say Dumper[eval()]//$@'
Я думаю, что вы спрашиваете об интерфейсе REPL (Read, Evaluate, Print, Loop) для Perl. Есть несколько способов сделать это:
Я использую командную строку в качестве консоли:
$ perl -e 'print "JAPH\n"'
Тогда я могу использовать мой Баш историю чтобы вернуть старые команды. Это не сохраняет государство, как бы то ни было.
Эта форма наиболее полезна, когда вы хотите проверить «одну маленькую вещь» (например, когда отвечаете на вопросы Perl). Часто я нахожу, что эти команды дословно записываются в сценарий оболочки или make-файл.
fish
, тебе даже не нужно \n
.
В Perl нет встроенной интерактивной консоли, как это делает Python. Однако вы можете использовать Perl Debugger для отладки связанных вещей. Вы включаете его с помощью опции -d, но, возможно, захотите проверить 'man perldebug', чтобы узнать об этом.
После небольшого поиска, есть отдельный проект, который реализует консоль Perl, которую вы можете найти по адресу http://www.sukria.net/perlconsole.html .
Надеюсь это поможет!
Вы всегда можете просто зайти во встроенный отладчик и запустить команды оттуда.
perl -d -e 1
Есть два популярных Perl REPL.
sudo apt-get install libreply-perl
. Затем его можно запустить, просто набрав reply
в терминале.
Я создал perli
, 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
.
perldoc
из perli
REPL, как 'someCommand ?'
. Похоже, что он не обновлялся некоторое время, вы все еще поддерживаете Perli?
perli
давно не обновлялся, потому что в моем личном использовании я не сталкивался с какими-либо проблемами, и, кажется, немногие другие используют его, но, насколько я знаю, он все еще работает так, как рекламируется.
perl -d
твой друг:
% perl -de 0
re.pl от Devel :: REPL
Цикл чтения-проверки-печати:
$ perl -e'while(<>){print eval,"\n"}'
У Perl нет консоли, но отладчик можно использовать как единое целое. В командной строке введите perl -de 1
. (Значение «1» не имеет значения, это просто правильное утверждение, которое ничего не делает.)
Есть также несколько вариантов оболочки Perl .
Для получения дополнительной информации читайте perlfaq3 .
Вы можете посмотреть в psh здесь: http://gnp.github.io/psh/
Это полная оболочка (например, вы можете использовать ее вместо bash), но использует синтаксис perl ... так что вы можете создавать методы на лету и т. Д.
В обзоре Мэтта Траута перечислены пять вариантов, perl -de 0
и он рекомендует Reply
, если важна расширяемость с помощью плагинов, или tinyrepl
от Eval::WithLexicals
, для минимального, чисто Perl-решения, которое включает поддержку readline и лексическую устойчивость.
Обновление: с тех пор я создал загружаемый REPL - см. Мой другой ответ .
Оглядываясь назад:
rlwrap
, который обеспечивает поддержку readline для любой команды, вы можете объединить ее с простой командой Perl для создания пригодного REPL и, таким образом, обойтись без сторонних решений REPL.
rlwrap
через Homebrew сbrew install rlwrap
.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
Как и в ответе Яна, скалярный результат выражения печатается автоматически ; например:
iperl> 22 / 7 # automatically print scalar result of expression: 3.14285714285714
Также найдите ptkdb в CPAN: http://search.cpan.org/search?query=ptkdb&mode=all
Sepia и PDE также имеют собственные REPL (для GNU Emacs).
Смотрите также Стильный REPL (для GNU Emacs) http://blog.jrock.us/articles/Stylish%20REPL.pod
Вы можете сделать это онлайн (как и многие вещи в жизни) здесь:
$ rlwrap perl -d -e 1
Вы получите историю и непротиворечивое приглашение