¿Cómo puedo iniciar una consola interactiva para Perl?
-
09-06-2019 - |
Pregunta
¿Cómo puedo iniciar una consola interactiva para Perl, similar a la irb
comando para Ruby o python
para Python?
Solución
Puedes usar el depurador de Perl en un programa trivial, así:
perl -de1
Alternativamente hay Alexis SukriehConsola Perl aplicación, pero no la he usado.
Otros consejos
Matt Trout no solo escribió un artículo sobre un REPL, sino que también escribió uno: Desarrollo::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ó a la persona que mencionó el uso de "perl -e" desde la consola.Esto no es realmente un REPL, es cierto, pero es increíblemente útil y lo uso todo el tiempo.
Escribí un script que llamo "psh":
#! /usr/bin/perl
while (<>) {
chomp;
my $result = eval;
print "$_ = $result\n";
}
Lo que escribas, 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
Si quieres historia, usa envoltura.Este 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>
Creo que estás preguntando acerca de 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 ingresar al IRC en irc.perl.org y probar uno de los robots de evaluación en muchos de los canales populares.Evaluarán fragmentos de Perl que les pases.
Utilizo la línea de comando como consola:
$ perl -e 'print "JAPH\n"'
Entonces puedo usar mi intento historial para recuperar comandos antiguos.Sin embargo, esto no preserva el estado.
Este formulario es más útil cuando desea probar "una pequeña cosa" (como al responder preguntas de Perl).A menudo, encuentro que estos comandos se copian palabra por palabra en un script de shell o en un archivo MAKE.
No existe una consola interactiva para Perl integrada como la que tiene Python.Sin embargo, puede utilizar el depurador de Perl para realizar tareas relacionadas con la depuración.Se activa con la opción -d, pero es posible que desee consultar 'man perldebug' para obtener más información.
Después de buscar un poco en Google, hay un proyecto independiente que implementa una consola Perl que puedes encontrar en http://www.sukria.net/perlconsole.html.
¡Espero que esto ayude!
Siempre puedes acceder al depurador integrado y ejecutar comandos desde allí.
perl -d -e 1
Hay dos REPL de Perl populares.
1. Desarrollo::REPL es genial.
2.Pero en mi opinión Responder es mejor.
he creado perli
, a Perl REPL que sigue corriendo Linux, macOS y Windows.
Su enfoque es la impresión automática de resultados, las búsquedas de documentación convenientes e inspección fácil de los partidos de expresión regular.
Puedes ver capturas de pantalla aquí.
Funciona ser único (no tiene más dependencias que el propio Perl), pero Instalación de rlwrap
es muy recomendable para admitir la edición de la línea de comandos, el historial de comandos persistente y la finalización de tabulaciones - leer más aquí.
Instalación
Si tienes Node.js instalado:
npm install -g perli
De lo contrario:
Unix-plataformas similares:Descargar este guión como
perli
a una carpeta en la ruta de su sistema y hacerlo ejecutable conchmod +x
.ventanas:Descargar el este guión como
perli.pl
(nota la.pl
extensión) a una carpeta en la ruta de su sistema.
Si no le importa invocar a Perli comoperli.pl
, ya está todo listo.
De lo contrario, cree un archivo por lotes llamadoperli.cmd
en la misma carpeta con el siguiente contenido:@%~dpn.pl %*
;esto permite la invocación tan soloperli
.
perl -d
es tu amigo:
% perl -de 0
re.pl de Devel::REPL
Siempre lo hice:
perl -wlne'eval;print$@if$@'
Con 5.10, cambié a:
perl -wnE'say eval()//$@'
Bucle de lectura-evaluación-impresión:
$ perl -e'while(<>){print eval,"\n"}'
Perl no tiene consola, pero el depurador se puede utilizar como tal.En un símbolo del sistema, escriba perl -de 1
.(El valor "1" no importa, es sólo una declaración válida que no hace nada).
También hay un par de opciones para un caparazón de perla.
Para más información lea perlfaq3.
Podrías investigar 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.
En Debian/Ubuntu:
$ sudo apt-get install libdevel-repl-perl
$ re.pl
$ sudo apt-get install libapp-repl-perl
$ iperl
Actualizar:Desde entonces he creado un REPL descargable - ver mi otra respuesta.
En retrospectiva:
- El soluciones de terceros mencionados entre las respuestas existentes son engorroso de instalar y/o no funciona 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 soporte de teclado de edición de línea de comandos y soporte de historial - garantizar que este 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 comando Perl simple para crear un REPL utilizable., y, por lo tanto, arreglárselas sin soluciones REPL de terceros.- En OSX, puedes instalar
rlwrap
a través de cerveza casera conbrew install rlwrap
. - Las distribuciones de Linux deberían ofrecer
rlwrap
a través de sus respectivos administradores de paquetes;por ejemplo, en Ubuntu, usesudo apt-get install rlwrap
. - Ver La respuesta de Ján Sáreník para dicha combinación de
rlwrap
y un comando Perl.
- En OSX, puedes instalar
Lo que NO obtienes con la respuesta de Ján:
- autocompletado
- capacidad de ingresar declaraciones de varias líneas
La única solución de terceros que los ofrece (con instalación no trivial + pasos adicionales no obvios) es psh, pero:
no ha visto actividad en alrededor de 2,5 años
su enfoque es diferente en el sentido de que pretende ser un completo reemplazo de concha, y por lo tanto funciona como un shell tradicional, lo que significa que no evalúa automáticamente un comando como un perla declaración 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 matrices/listas/tablas hash como escalares, es decir, sólo imprime sus recuento de elementos, mientras que sería útil enumerar sus elementos.
Si instalas el Data::Printer
módulo con [sudo] cpan Data::Printer
Como operación única, puede cargarla en el REPL para usarla. p()
función, a la que puede pasar listas/matrices/tablas hash para su enumeración.
Aquí hay un alias llamado iperl
con línea de lectura y Data::Printer
apoyo, 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 mediante 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 escalar el resultado de una expresión es automáticamente impreso;p.ej.:
iperl> 22 / 7 # automatically print scalar result of expression: 3.14285714285714
Matt trucha descripción general enumera cinco opciones, desde perl -de 0
en adelante, y recomienda Reply
, si la extensibilidad a través de complementos es importante, o tinyrepl
de Eval::WithLexicals
, para una solución mínima, puramente Perl que incluye soporte readline y persistencia léxica.
Busque también ptkdb en CPAN:http://search.cpan.org/search?query=ptkdb&mode=all
Sepia y PDE también tienen REPL propios (para GNU Emacs).
Véase también REPL con estilo (para GNU Emacs) http://blog.jrock.us/articles/Stylish%20REPL.pod