Pregunta

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

¿Fue útil?

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 con chmod +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 como perli.pl, ya está todo listo.
      De lo contrario, cree un archivo por lotes llamado perli.cmd en la misma carpeta con el siguiente contenido: @%~dpn.pl %*;esto permite la invocación tan solo perli.

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 con brew install rlwrap.
    • Las distribuciones de Linux deberían ofrecer rlwrap a través de sus respectivos administradores de paquetes;por ejemplo, en Ubuntu, use sudo apt-get install rlwrap.
    • Ver La respuesta de Ján Sáreník para dicha combinación de rlwrap y un comando Perl.

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.

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

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top