repl perl console interactive read-eval-print-loop

repl - ¿Cómo puedo iniciar una consola interactiva para Perl?



repl ruby (22)

¿Cómo puedo iniciar una consola interactiva para Perl, similar al comando irb para Ruby o python para Python?


Bajo Debian / Ubuntu:

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


Ciclo de lectura-evaluación-lectura:

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



Creo que estás preguntando sobre una interfaz REPL (Leer, Evaluar, Imprimir, Bucle) para perl. Hay algunas maneras de hacer esto:

  • Matt Trout tiene un artículo que describe cómo escribir uno.
  • Adriano Ferreira ha descrito algunas opciones.
  • y finalmente, puedes subirte al IRC en irc.perl.org y probar uno de los bots eval en muchos de los canales populares. Ellos evaluarán los trozos de perl que les pases.

Escribí un guión que llamo "psh":

#! /usr/bin/perl while (<>) { chomp; my $result = eval; print "$_ = $result/n"; }

Lo que sea que escriba, se evalúa en 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


Hay dos populares REPL Perl.
1. Devel::REPL es genial.
2. Pero la Reply OMI es mejor.


He creado perli , un REPL de Perl que se ejecuta en Linux, OS X y Windows .

Su enfoque es la impresión automática de resultados, búsquedas de documentación convenientes y una fácil inspección de las coincidencias de expresiones regulares.
Puedes ver capturas de pantalla here .

Funciona de forma independiente (no tiene dependencias distintas de Perl), pero se recomienda la instalación de rlwrap para que sea compatible con la edición de línea de comandos, el historial de comandos persistente y la finalización de pestañas. Lea más here .

Instalación

  • Si tiene instalado Node.js:

    npm install -g perli

  • De otra manera:

    • Plataformas similares a Unix : descargue este script como perli a una carpeta en la ruta de su sistema y perli ejecutable con chmod +x .

    • Windows : descargue este script como perli.pl (note la extensión .pl ) a una carpeta en la ruta de su sistema.
      Si no te importa invocar Perli como perli.pl , estás listo.
      De lo contrario, cree un archivo por lotes llamado perli.cmd en la misma carpeta con el siguiente contenido: @%~dpn.pl %* ; Esto habilita la invocación como solo perli .


La shadow.cat/blog/matt-s-trout/mstpan-17 Matt Trout enumera cinco opciones, desde perl -de 0 adelante, y recomienda Reply , si la extensibilidad a través de complementos es importante, o una tinyrepl de Eval::WithLexicals , para una solución mínima de perl puro que incluye soporte de readline y persistencia léxica.


Matt Trout no solo escribió un artículo sobre un REPL, sino que también escribió uno: Devel::REPL

Lo he usado un poco y funciona bastante bien, y está en desarrollo activo.

Por cierto, no tengo idea de por qué alguien modificó la persona que mencionó el uso de "perl -e" desde la consola. Esto no es realmente un REPL, es cierto, pero es fantásticamente útil, y lo uso todo el tiempo.


No hay una consola interactiva para Perl como Python. Sin embargo, puede utilizar el Depurador de Perl para hacer cosas relacionadas con la depuración. Lo enciendes con la opción -d, pero tal vez quieras revisar ''man perldebug'' para conocerlo.

Después de un poco de googlear, hay un proyecto separado que implementa una consola Perl que puede encontrar en .

¡Espero que esto ayude!


Perl no tiene una consola, pero el depurador se puede usar como uno. En el símbolo del sistema, escriba perl -de 1 . (El valor "1" no importa, es solo una declaración válida que no hace nada).

También hay un par de opciones para un shell Perl .

Para más información lea perlfaq3 .


Puede consultar psh aquí: http://gnp.github.io/psh/

Es un shell completo (puedes usarlo en reemplazo de bash por ejemplo), pero usa la sintaxis de Perl ... para que puedas crear métodos sobre la marcha, etc.



Sepia y PDE también tienen REPL (para GNU Emacs).


Si quieres historia, usa rlwrap . Esto podría ser tu ~/bin/ips por ejemplo:

#!/bin/sh echo ''This is Interactive Perl shell'' rlwrap -A -pgreen -S"perl> " perl -wnE''say eval()//$@''

Y así es como se ve:

$ ips This is Interactive Perl shell perl> 2**128 3.40282366920938e+38 perl>


Siempre lo hice

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

Con 5.10, he cambiado a:

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


Siempre puedes soltar en el depurador incorporado y ejecutar comandos desde allí.

perl -d -e 1



Yo uso la línea de comandos como una consola:

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

Entonces puedo usar mi historial de bash para recuperar comandos antiguos. Esto no preserva el estado, sin embargo.

Este formulario es más útil cuando se quiere probar "una pequeña cosa" (como cuando se responden preguntas de Perl). A menudo, encuentro que estos comandos se raspan literalmente en un script de shell o makefile.


re.pl de Devel :: REPL


perl -d es tu amigo

% perl -de 0


Actualización: desde entonces he creado un REPL descargable, vea mi otra respuesta .

Con el beneficio de la retrospectiva:

  • Las soluciones de terceros mencionadas entre las respuestas existentes son complicadas de instalar y / o no funcionan sin pasos adicionales no triviales y no obvios : algunas soluciones parecen estar al menos a medias abandonadas.
  • Un REPL utilizable necesita la biblioteca readline para el soporte de teclado de edición de línea de comandos y el soporte de historial , lo que garantiza que sea un punto problemático para muchas soluciones de terceros.
  • Si instala CLI rlwrap , que proporciona soporte de línea de lectura para cualquier comando, puede combinarlo con un simple comando de Perl para crear un REPL utilizable , y así hacerlo sin soluciones de REPL de terceros.
    • En OSX, puede instalar rlwrap través de Homebrew con brew install rlwrap .
    • Las distribuciones de Linux deberían ofrecer rlwrap través de sus respectivos administradores de paquetes; por ejemplo, en Ubuntu, use sudo apt-get install rlwrap .
    • Vea la respuesta de Ján Sáreník para dicha combinación de rlwrap y un comando de Perl.

Lo que NO obtienes con la respuesta de Ján:

  • autocompletar
  • capacidad de introducir declaraciones de varias líneas

La única solución de terceros que ofrece estos (con instalación no trivial + pasos adicionales y no obvios) es psh , pero:

  • No ha visto actividad en alrededor de 2.5 años.

  • su enfoque es diferente, ya que pretende ser un reemplazo de shell completo, y por lo tanto funciona como un shell tradicional, lo que significa que no evalúa automáticamente un comando como una declaración de Perl , y requiere un comando de salida explícito como print Para imprimir el resultado de una expresión.

La respuesta de Ján Sáreník se puede mejorar de una manera:

  • Por defecto, imprime arrays / lists / hashtables como escalares , es decir, solo imprime el número de elementos , mientras que sería útil enumerar sus elementos.

Si instala el módulo Data::Printer con [sudo] cpan Data::Printer como una sola operación, puede cargarlo en el REPL para usar la función p() , a la que puede pasar listas / matrices / Hashtables para enumeración.

Aquí hay un alias llamado iperl con readline y Data::Printer support , que puede colocar en el archivo de inicialización de su shell tipo POSIX (por ejemplo, ~/.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 ejemplo, puede hacer lo siguiente para imprimir todas las variables de entorno a través de la tabla hash %ENV :

$ iperl # start the REPL iperl> p %ENV # print key-value pairs in hashtable %ENV

Al igual que con la respuesta de Ján, el resultado escalar de una expresión se imprime automáticamente ; p.ej:

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