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"}''
Consulte también Stylish REPL (para GNU Emacs) http://blog.jrock.us/articles/Stylish%20REPL.pod
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 yperli
ejecutable conchmod +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 comoperli.pl
, estás listo.
De lo contrario, cree un archivo por lotes llamadoperli.cmd
en la misma carpeta con el siguiente contenido:@%~dpn.pl %*
; Esto habilita la invocación como soloperli
.
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.
Puedes usar el depurador de perl en un programa trivial, así:
perl -de1
Alternativamente, está la aplicación Perl Console de Alexis Sukrieh , pero no la he usado.
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
También busque ptkdb en CPAN: http://search.cpan.org/search?query=ptkdb&mode=all
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 conbrew install rlwrap
. - Las distribuciones de Linux deberían ofrecer
rlwrap
través de sus respectivos administradores de paquetes; por ejemplo, en Ubuntu, usesudo apt-get install rlwrap
. - Vea la respuesta de Ján Sáreník para dicha combinación de
rlwrap
y un comando de Perl.
- En OSX, puede instalar
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