Respostas:
Você pode usar o depurador perl em um programa trivial, assim:
perl -de1
Como alternativa, há o aplicativo Perl Console de Alexis Sukrieh , mas eu não o usei.
control
+ L
não funciona nessa interface de comando, como devo atualizar a tela?
rlwrap
). Todas as soluções REPL / console de terceiros, inclusive perlconsole
, são difíceis de instalar e geralmente têm mais limitações.
perl -de1
não parece apoio my
variáveis, e hashes não quer trabalhar, por alguma razão ...
perlconsole
não sofre com esses problemas.
Matt Trout não apenas escreveu um artigo sobre um REPL, como também escreveu um - Devel :: REPL
Eu usei um pouco e funciona bastante bem, e está em desenvolvimento ativo.
BTW, não tenho idéia por que alguém modificou a pessoa que mencionou usar "perl -e" no console. Isso não é realmente um REPL, é verdade, mas é fantasticamente útil, e eu o uso o tempo todo.
[sudo] cpan Devel::REPL
não funcionou para mim, nem no OSX 10.10 (Perl 5.18.2) nem no Ubuntu 14.04 (Perl 5.18.2): Eu recebo erros de tempo de execução reclamando da falta de módulos; instalou um e desistiu depois que outro módulo ausente foi relatado.
re.pl
autor, escreveu um artigo listando várias alternativas, e ele mesmo sugere o uso reply
em vez de re.pl
: shadow.cat/blog/matt-s-trout/mstpan-17
Eu escrevi um script que chamo de "psh":
#! /usr/bin/perl
while (<>) {
chomp;
my $result = eval;
print "$_ = $result\n";
}
Tudo o que você digita, ele avalia no 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
Se você quiser histórico, use rlwrap . Pode ser seu, ~/bin/ips
por exemplo:
#!/bin/sh
echo 'This is Interactive Perl shell'
rlwrap -A -pgreen -S"perl> " perl -wnE'say eval()//$@'
E é assim que parece:
$ ips
This is Interactive Perl shell
perl> 2**128
3.40282366920938e+38
perl>
alias iperl='rlwrap -A -S "perl> " perl -wnE '\''say eval()//$@'\'
. Usuários OSX podem instalar rlwrap
via Homebrew com brew install rlwrap
.
rlwrap -A -pgreen -S'perl> ' perl -MData::Dumper -wnE'say Dumper[eval()]//$@'
Eu acho que você está perguntando sobre uma interface REPL (ler, avaliar, imprimir, loop) para perl. Há algumas maneiras de fazer isto:
Eu uso a linha de comando como um console:
$ perl -e 'print "JAPH\n"'
Então eu posso usar meu histórico do bash para recuperar comandos antigos. Isso não preserva o estado, no entanto.
Este formulário é mais útil quando você deseja testar "uma coisinha" (como ao responder perguntas de Perl). Muitas vezes, acho que esses comandos são escritos literalmente em um script de shell ou makefile.
fish
você nem precisa do \n
.
Não há um console interativo para Perl integrado como o Python. No entanto, você pode usar o Perl Debugger para executar tarefas relacionadas à depuração. Você o ativa com a opção -d, mas pode querer verificar o 'man perldebug' para aprender sobre isso.
Depois de pesquisar um pouco, existe um projeto separado que implementa um console Perl que você pode encontrar em http://www.sukria.net/perlconsole.html .
Espero que isto ajude!
Você sempre pode simplesmente entrar no depurador interno e executar comandos a partir daí.
perl -d -e 1
Existem dois REPLs Perl populares.
sudo apt-get install libreply-perl
. Em seguida, ele pode ser executado simplesmente digitando reply
um terminal.
Eu criei perli
um Perl REPL que roda em Linux, macOS e Windows .
Seu foco é a impressão automática de resultados, pesquisas práticas na documentação e inspeção fácil de correspondências de expressões regulares.
Você pode ver as capturas de tela aqui .
Funciona independente (não possui dependências além do próprio Perl), mas é altamente recomendável a instalação derlwrap
, a fim de oferecer suporte à edição de linha de comando, histórico de comandos persistente e conclusão de guias - leia mais aqui .
Instalação
Se você tiver o Node.js instalado:
npm install -g perli
De outra forma:
Plataformas do tipo Unix : Faça o download desse script como perli
uma pasta no caminho do sistema e torne-o executável chmod +x
.
Windows : Faça o download deste script como perli.pl
(observe a .pl
extensão) para uma pasta no caminho do sistema.
Se você não se importa de chamar Perli como perli.pl
, está tudo pronto.
Caso contrário, crie um arquivo perli.cmd
em lotes nomeado na mesma pasta com o seguinte conteúdo @%~dpn.pl %*
:; isso permite a invocação como justa perli
.
perldoc
partir do perli
REPL 'someCommand ?'
. Parece que não foi atualizado por um tempo, você ainda está mantendo o perli?
perli
não foi atualizado há algum tempo, porque, no meu uso pessoal, não encontro nenhum problema e poucas pessoas parecem usá-lo, mas, tanto quanto sei, ainda funciona como anunciado.
perl -d
é seu amigo:
% perl -de 0
re.pl de Devel :: REPL
Loop de leitura e avaliação:
$ perl -e'while(<>){print eval,"\n"}'
O Perl não possui um console, mas o depurador pode ser usado como um. No prompt de comando, digite perl -de 1
. (O valor "1" não importa, é apenas uma declaração válida que não faz nada.)
Existem também algumas opções para um shell Perl .
Para mais informações, leia perlfaq3 .
Você pode procurar no psh aqui: http://gnp.github.io/psh/
É um shell completo (você pode usá-lo em substituição ao bash, por exemplo), mas usa a sintaxe perl .. para criar métodos dinamicamente etc.
A visão geral de Matt Trout lista cinco opções, a partir perl -de 0
de então, e ele recomenda Reply
, se a extensibilidade via plug-ins é importante, ou a tinyrepl
partir de Eval::WithLexicals
, para uma solução mínima de perl puro que inclua suporte à linha de leitura e persistência lexical.
Atualização: criei um REPL para download - veja minha outra resposta .
Com o benefício da retrospectiva:
rlwrap
, que fornece suporte de linha de leitura a qualquer comando, poderá combiná-la com um comando Perl simples para criar um REPL utilizável e, assim, se contentar com as soluções REPL de terceiros.
rlwrap
via Homebrew with brew install rlwrap
.rlwrap
através de seus respectivos gerenciadores de pacotes; por exemplo, no Ubuntu, use sudo apt-get install rlwrap
.rlwrap
e um comando Perl.O que você NÃO recebe com a resposta de Ján:
A única solução de terceiros que oferece essas opções (com instalação não trivial + etapas adicionais e não óbvias) é psh , mas:
não vê atividade há cerca de 2,5 anos
seu foco é diferente na medida em que pretende ser um pleno direito de substituição shell , e, portanto, funciona como um escudo tradicional, o que significa que não avalia automaticamente um comando como Perl declaração, e requer um comando de saída explícita, como print
a imprime o resultado de uma expressão.
A resposta de Ján Sáreník pode ser melhorada de uma maneira:
Se você instalar o Data::Printer
módulo [sudo] cpan Data::Printer
como uma operação única, poderá carregá-lo no REPL para uso da p()
função, para o qual pode passar listas / matrizes / hashtables para enumeração.
Aqui está um apelido nomeado iperl
com readline e Data::Printer
suporte , que você pode colocar no arquivo de inicialização do seu shell semelhante ao POSIX (por exemplo, ~/.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()//$@'\'
Por exemplo, você pode fazer o seguinte para imprimir todas as variáveis de ambiente via hashtable %ENV
:
$ iperl # start the REPL
iperl> p %ENV # print key-value pairs in hashtable %ENV
Como na resposta de Ján, o resultado escalar de uma expressão é impresso automaticamente ; por exemplo:
iperl> 22 / 7 # automatically print scalar result of expression: 3.14285714285714
Procure também ptkdb no CPAN: http://search.cpan.org/search?query=ptkdb&mode=all
Sépia e PDE também possuem REPLs (para GNU Emacs).
Veja também Stylish REPL (para GNU Emacs) http://blog.jrock.us/articles/Stylish%20REPL.pod
Você pode fazê-lo online (como muitas coisas na vida) aqui:
$ rlwrap perl -d -e 1
Você poderia obter história e um prompt consistente