Pergunta

Como posso iniciar um console interativo para Perl, semelhante ao irb comando para Ruby ou python para Python?

Foi útil?

Solução

Você pode usar o depurador perl em um programa trivial, assim:

perl -de1

Alternativamente há Alexis SukriehConsole Perl do aplicativo, mas não o usei.

Outras dicas

Matt Trout não apenas escreveu um artigo sobre um REPL, ele realmente escreveu um - Desenvolver::REPL

Eu usei um pouco e funciona muito bem, e está em desenvolvimento ativo.

Aliás, não tenho ideia de por que alguém modificou a pessoa que mencionou o uso de "perl -e" no console.Este não é realmente um REPL, é verdade, mas é fantasticamente útil e eu o uso o tempo todo.

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 em 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.Este poderia ser o 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> 

Acho que você está perguntando sobre uma interface REPL (Read, Evaluate, Print, Loop) para Perl.Há algumas maneiras de fazer isto:

  • Matt Trout tem um artigo que descreve como escrever um
  • Adriano Ferreira descreveu algumas opções
  • e, finalmente, você pode acessar o IRC em irc.perl.org e experimentar um dos bots de avaliação em muitos dos canais populares.Eles avaliarão pedaços de perl que você passa para eles.

Eu uso a linha de comando como console:

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

Então posso usar meu festa histórico 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 Perl).Freqüentemente, acho que esses comandos são copiados literalmente em um script de shell ou makefile.

Não existe um console interativo para Perl integrado como o Python.No entanto, você pode usar o Perl Debugger para depurar coisas relacionadas.Você o ativa com a opção -d, mas talvez queira dar uma olhada em 'man perldebug' para saber mais sobre isso.

Depois de pesquisar um pouco no Google, há 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 acessar o depurador integrado e executar comandos a partir dele.

   perl -d -e 1

Existem dois REPLs Perl populares.
1. Desenvolver::REPL é ótimo.
2.Mas OMI Responder é melhor.

eu criei perli, a Perl REPL que continua Linux, macOS e Windows.

Seu foco é a impressão automática de resultados, pesquisas de documentação convenientes e fácil inspeção de correspondências regulares de expressão.
Você pode ver capturas de tela aqui.

Funciona estar sozinho (não tem dependências além do próprio Perl), mas instalação de rlwrap é fortemente recomendado para oferecer suporte à edição de linha de comando, histórico de comando persistente e preenchimento de tabulação - leia mais aqui.

Instalação

  • Se acontecer de você ter o Node.js instalado:

    npm install -g perli
    
  • De outra forma:

    • Unixplataformas semelhantes:Download este roteiro como perli para uma pasta no caminho do seu sistema e torne-o executável com chmod +x.

    • janelas:Faça o download do este roteiro como perli.pl (Note o .pl extension) para uma pasta no caminho do seu sistema.
      Se você não se importa em invocar Perli como perli.pl, está tudo pronto.
      Caso contrário, crie um arquivo em lote chamado perli.cmd na mesma pasta com o seguinte conteúdo: @%~dpn.pl %*;isso permite a invocação apenas perli.

perl -d é seu amigo:

% perl -de 0

re.pl de Devel::REPL

Eu sempre fiz:

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

Com 5.10, mudei para:

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

Loop de leitura-avaliação-impressão:

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

Perl não possui um console, mas o depurador pode ser usado como um.Em um 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 Concha Perl.

Para mais informações leia perlfaq3.

Você pode dar uma olhada no psh aqui: http://gnp.github.io/psh/

É um shell completo (você pode usá-lo no lugar do bash, por exemplo), mas usa sintaxe perl.para que você possa criar métodos dinamicamente, etc.

No Debian/Ubuntu:

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

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

Atualizar:Desde então, criei um REPL para download - consulte minha outra resposta.

Com o benefício da retrospectiva:

  • O soluções de terceiros mencionados entre as respostas existentes são complicado de instalar e/ou não funciona sem etapas adicionais não triviais e não óbvias - algumas soluções parecem estar pelo menos parcialmente abandonadas.
  • Um REPL utilizável precisa da biblioteca readline para suporte de teclado de edição de linha de comando e suporte de histórico - garantindo que este seja um ponto problemático para muitas soluções de terceiros.
  • Se você instalar CLI rlwrap, que fornece suporte readline para qualquer comando, você pode combiná-lo com um comando Perl simples para criar um REPL utilizável, e, assim, sobreviver sem soluções REPL de terceiros.
    • No OSX, você pode instalar rlwrap através da Cerveja caseira com brew install rlwrap.
    • Distribuições Linux devem oferecer rlwrap através de seus respectivos gerenciadores de pacotes;por exemplo, no Ubuntu, use sudo apt-get install rlwrap.
    • Ver Resposta de Ján Sáreník para a referida combinação de rlwrap e um comando Perl.

O que você NÃO recebe com a resposta de Ján:

  • preenchimento automático
  • capacidade de inserir instruções multilinhas

A única solução de terceiros que oferece isso (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 substituição de casca, e, portanto, funciona como um shell tradicional, o que significa que ele não avalia automaticamente um comando como um Perl instrução e requer um comando de saída explícito, como print para imprimir o resultado de uma expressão.


Resposta de Ján Sáreník pode ser melhorado de uma maneira:

  • Por padrão, imprime arrays/listas/hashtables como escalares, ou seja, imprime apenas seus contagem de elementos, embora seria útil enumerar seus elementos.

Se você instalar o Data::Printer módulo com [sudo] cpan Data::Printer como uma operação única, você pode carregá-lo no REPL para uso do p() função, para a qual você pode passar listas/arrays/hashtables para enumeração.

Aqui está um alias nomeado iperl com readline e Data::Printer apoiar, que você pode colocar no arquivo de inicialização do seu shell tipo 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

Tal como acontece com a resposta de Ján, o escalar o resultado de uma expressão é automaticamente impresso;por exemplo.:

iperl> 22 / 7  # automatically print scalar result of expression: 3.14285714285714

Matt Trout visão geral lista cinco opções, de perl -de 0 em diante, e ele recomenda Reply, se a extensibilidade por meio de plug-ins for importante ou tinyrepl de Eval::WithLexicals, para uma solução Perl mínima e pura que inclui suporte readline e persistência lexical.

Procure também por ptkdb no CPAN:http://search.cpan.org/search?query=ptkdb&mode=all

Sépia e PDE também possuem REPLs próprios (para GNU Emacs).

Veja também Stylish REPL (para GNU Emacs) http://blog.jrock.us/articles/Stylish%20REPL.pod

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top