it-swarm-pt.tech

Como posso iniciar um console interativo para o Perl?

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

246
ibz

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

Perl -de1

Alternativamente, há Alexis Sukrieh 's Perl Console aplicação, mas eu não usei isso.

275
Daniel Papasian

Não só Matt Trout escreveu um artigo sobre um REPL, ele realmente escreveu um - Devel :: REPL

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

BTW, eu não tenho idéia porque alguém modificou a pessoa que mencionou usando "Perl -e" do console. Isso não é realmente um REPL, é verdade, mas é fantasticamente útil, e eu uso isso o tempo todo.

59
Dave Rolsky

Eu escrevi um script que chamo de "psh":

#! /usr/bin/Perl

while (<>) {
  chomp;
  my $result = eval;
  print "$_ = $result\n";
}

Tudo o que você digita, 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
34
raldi

Se você quer história, use rlwrap . Este poderia ser seu ~/bin/ips por exemplo:

#!/bin/sh
echo 'This is Interactive Perl Shell'
rlwrap -A -pgreen -S"Perl> " Perl -wnE'say eval()//[email protected]'

E é assim que parece:

$ ips
This is Interactive Perl Shell
Perl> 2**128
3.40282366920938e+38
Perl> 
22
Ján Sáreník

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

  • Matt Trout tem m artigo que descreve como escrever um
  • Adriano Ferreira descreveu algumas opções
  • e finalmente, você pode pular no IRC no irc.Perl.org e experimentar um dos bots do eval em muitos dos canais populares. Eles vão avaliar pedaços de Perl que você passa para eles.
20
amoore

Eu uso a linha de comando como um console:

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

Então eu posso usar meu bash histórico para voltar antigos comandos. Isso não preserva o estado, no entanto.

Este formulário é mais útil quando você quer testar "uma coisinha" (como ao responder perguntas do Perl). Muitas vezes, eu vejo esses comandos serem copiados textualmente em um script Shell ou makefile.

19
Jon Ericson

Não há um console interativo para o Perl construído como o Python. Você pode, entretanto, usar o Depurador Perl para fazer depuração de coisas relacionadas. Você o liga com a opção -d, mas você pode querer verificar 'man perldebug' para aprender sobre isso.

Depois de um pouco de googling, há um projeto separado que implementa um console Perl que você pode encontrar em http://www.sukria.net/perlconsole.html .

Espero que isto ajude!

15
Frank Wiles

Você sempre pode simplesmente acessar o depurador interno e executar comandos a partir daí.

   Perl -d -e 1
14
Clinton Pierce

Eu criei perli , a Perl REPL que roda em 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 de expressões regulares.
Você pode ver capturas de tela aqui .

Ele funciona stand-alone (não tem dependências além do próprio Perl), mas instalação de rlwrap é altamente recomendado para suportar edição de linha de comando, histórico de comandos persistentes e tab-completion - leia mais aqui .

Instalação

  • Se você tiver o Node.js instalado:

    npm install -g perli
    
  • De outra forma:

    • Plataformas Unix -: Baixe este script como perli para uma pasta no caminho do seu sistema e torne-a executável com chmod +x.

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

11
mklement0

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

11
Eric Johnson

Perl -d é seu amigo:

% Perl -de 0
6
Brian Phillips

re.pl de Devel :: REPL

6
Johny

Loop de leitura e leitura de resultados:

$ Perl -e'while(<>){print eval,"\n"}'
5
KIM Taegyoon

Eu sempre fiz:

Perl -wlne'eval;[email protected][email protected]'

Com o 5.10, mudei para:

Perl -wnE'say eval()//[email protected]'
5
ysth

O 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.)

Há também algumas opções para um Perl Shell .

Para mais informações, leia perlfaq .

4
Michael Carman

Você poderia olhar para o psh aqui: http://gnp.github.io/psh/

É um completo no Shell (você pode usá-lo em substituição ao bash, por exemplo), mas usa a sintaxe do Perl ... para que você possa criar métodos dinamicamente, etc.

3
shelfoo

Sob Debian/Ubuntu:

$ Sudo apt-get install libdevel-repl-Perl
$ re.pl

$ Sudo apt-get install libapp-repl-Perl
$ iperl
3
gavenkoa

Atualização: Eu criei um download REPL - veja minha outra resposta .

Com o benefício da retrospectiva:

  • As soluções de terceiros mencionadas entre as respostas existentes são complicadas de instalar e/ou não funcionam sem Etapas adicionais triviais e não óbvias - algumas soluções parecem estar pelo menos meio abandonadas.
  • Um utilizável REPL precisa da biblioteca readline para suporte de teclado de edição de linha de comando e suporte de histórico - garantindo que esse seja um ponto problemático para muitos terceiros -party soluções.
  • Se você instalar o 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 tornar sem soluções de terceiros REPL.
    • No OSX, você pode instalar o rlwrap via Homebrew com brew install rlwrap.
    • As distribuições Linux devem oferecer rlwrap através de seus respectivos gerenciadores de pacotes; Por exemplo, no Ubuntu, use Sudo apt-get install rlwrap.
    • Veja 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 de várias linhas

A única solução de terceiros que oferece estes (com instalação não-trivial + adicionais, etapas não óbvias), é psh, mas:

  • não viu atividade em cerca de 2,5 anos

  • seu foco é diferente, pois ele pretende ser um completo Shell replacement e, portanto, funciona como um Shell tradicional, o que significa que ele não avalia automaticamente um comando como um Perl , 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 melhorada de uma maneira:

  • Por padrão, ele imprime arrays/lists/hashtables como escalars , ou seja, apenas imprime seus elemento count , enquanto que seria útil enumerar seus elementos.

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

Aqui está um alias chamado iperl com readline e Data::Printer support , que você pode colocar no seu arquivo de inicialização do 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()//[email protected]'\'

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 é automatically impresso; por exemplo.:

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

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

1
Davor Cubranic

Sepia e PDE também possuem REPLs (para GNU Emacs).

0
Johny

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

0
Johny

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

0
runrig