22 ответов:
вы можете использовать отладчик perl для тривиальной программы, например:
perl -de1кроме того есть Alexis Sukriehконсоль Perl приложение, но я его не использовал.
мало того, что Мэтт Траут написал статью о REPL, он на самом деле написал один - Devel:: 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
Я использую командную строку в консоли:
$ perl -e 'print "JAPH\n"'затем я могу использовать Баш история, чтобы вернуть старые команды. Однако это не сохраняет состояние.
эта форма наиболее полезна, когда вы хотите проверить "одну маленькую вещь" (например, при ответе на вопросы Perl). Часто я нахожу, что эти команды дословно очищаются в сценарии оболочки или makefile.
Я думаю, что вы спрашиваете о интерфейсе REPL (Read, Evaluate, Print, Loop) для perl. Есть несколько способов сделать это:
- Мэтт Кумжа статьи, который описывает, как написать
- Адриано Феррейра описал некоторые варианты
- и, наконец, вы можете прыгать на IRC на irc.perl.org и попробуйте один из ботов eval во многих популярных каналах. Они будут оценивать куски perl, которые вы передаете их.
Если вы хотите историю, использовать 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>
нет интерактивной консоли для Perl, встроенной, как это делает Python. Однако вы можете использовать отладчик Perl для отладки связанных вещей. Вы включаете его с опцией-d, но вы можете проверить "man perldebug", чтобы узнать об этом.
после небольшого поиска в Google есть отдельный проект, который реализует консоль Perl, которую вы можете найти по адресу http://www.sukria.net/perlconsole.html.
надеюсь, что это помогает!
есть два популярных Perl REPLs.
1. Devel:: REPL - это здорово.
2. Но ИМО ответ - это лучше.
Я создал
perli, a Perl REPL что работает на Linux, OS X и Windows.его фокус-это автоматическая печать результатов, удобный поиск документации и простота проверка совпадений регулярных выражений.
Вы можете увидеть скриншоты здесь.он работает автономной (не имеет никаких зависимостей, кроме самого Perl), но установка
rlwrapрекомендуется чтобы поддерживать редактирование командной строки, постоянную историю команд и tab-завершение-подробнее здесь.установка
если у вас есть узел.Яш установлено:
npm install -g perliв противном случае:
Unix - подобные платформы: скачать этот скрипт как
perliв папку в пути вашей системы и сделать его исполняемым сchmod +x.Windows скачать этот скрипт как
perli.pl(обратите внимание на.plрасширение) в папку в пути вашей системы.
Если вы не против вызвать Perli какperli.pl, все готово.
В противном случае, создайте пакетный файл с именемperli.cmdв той же папке со следующим содержимым:@%~dpn.pl %*; это позволяет вызывать как толькоperli.
Я всегда делал так:
perl -wlne'eval;print$@if$@'С 5.10, я переключился на:
perl -wnE'say eval()//$@'
Perl не имеет консоли, но отладчик может быть использован как один. В командной строке введите
perl -de 1. (Значение " 1 " не имеет значения, это просто действительное утверждение, которое ничего не делает.)есть также несколько вариантов для Perl shell.
подробнее perlfaq3.
вы можете посмотреть в psh здесь:http://gnp.github.io/psh/
Это полная оболочка (вы можете использовать ее вместо bash, например), но использует синтаксис perl.. так что вы можете создать методы на лету и т. д.
обновление: с тех пор я создал загружаемый REPL - см. мой другой ответ.
с выгодой непредусмотрительности:
- The сторонние решения упоминается среди существующих ответов, либо громоздко устанавливать и/или не работать без нетривиальных, неочевидных дополнительных шагов - некоторые решения, по-видимому, по крайней мере наполовину заброшены.
- полезный REPL требуется библиотека readline для поддержки клавиатуры редактирования командной строки и поддержки истории - обеспечение этого является проблемным местом для многих сторонних решений.
- если вы устанавливаете CLI
rlwrap, который обеспечивает поддержку readline для любой команды, вы можете объединить его с простой командой Perl для создания полезного REPL, и таким образом делают обойтись без сторонних решений REPL.
- на OSX, вы можете установить
rlwrapчерез доморощенного Сbrew install rlwrap.- дистрибутивы Linux должны предложить
rlwrapчерез соответствующие менеджеры пакетов; например, на Ubuntu используйтеsudo apt-get install rlwrap.- посмотреть ответ Яна Сареника для сочетания
rlwrapи команда Perl.
чего ты не получишь С ответом Яна это:
- автозаполнение
- возможность ввода многострочных заявления
единственное стороннее решение, которое предлагает эти (с нетривиальной установкой + дополнительные, неочевидные действия), составляет ПШ, но:
он не видел активности в течение примерно 2,5 лет
его фокус отличается тем, что он стремится быть полноценным замена раковины, и таким образом работает как традиционная оболочка, что означает, что он не автоматически оцените команду как Perl оператор и требует явной команды вывода, такой как
ответ Яна Сареника можно улучшить одним способом:
- по умолчанию печатает массивы / списки / хэш-таблицы как скаляры, то есть, только печатает их графа элемент, тогда как было бы удобно перечислить их вместо этого элементы.
если вы установите
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()//$@'\'например, вы можете сделать следующее, чтобы напечатать все переменные среды через hashtable
%ENV:$ iperl # start the REPL iperl> p %ENV # print key-value pairs in hashtable %ENVкак и с ответом Яна,скаляр результат выражения автоматически printed; например:
iperl> 22 / 7 # automatically print scalar result of expression: 3.14285714285714
В Debian / Ubuntu:
$ sudo apt-get install libdevel-repl-perl $ re.pl $ sudo apt-get install libapp-repl-perl $ iperl
Мэтт Траута!--5-->обзор список из пяти вариантов, от
perl -de 0вперед, и он рекомендуетReply, если важна расширяемость через плагины, илиtinyreplСEval::WithLexicals, для минимального решения pure-perl, которое включает поддержку readline и лексическую персистентность.
также ищите ptkdb на CPAN: http://search.cpan.org/search?query=ptkdb&mode=all
см. также стильный REPL (для GNU Emacs)http://blog.jrock.us/articles/Stylish%20REPL.pod
Comments