it-swarm-es.tech

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

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

246
ibz

Puedes usar el depurador de Perl en un programa trivial, así:

Perl -de1

Alternativamente, está la aplicación Alexis Sukrieh Perl Console , pero no la he usado.

275
Daniel Papasian

Matt Trout no solo escribió un artículo sobre un REPL, sino que en realidad 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.

59
Dave Rolsky

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

#! /usr/bin/Perl

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

Cualquier cosa 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
34
raldi

Si quieres el historial, usa rlwrap . Este podría ser su ~/bin/ips por ejemplo:

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

Y así es como se ve:

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

Creo que estás preguntando por una interfaz REPL (Leer, Evaluar, Imprimir, Bucle) a 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 subir a 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.
20
amoore

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

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

Luego puedo usar mi bash history 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.

19
Jon Ericson

No hay una consola interactiva para Perl incorporada 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 buscar en Google, hay un proyecto separado que implementa una consola Perl que puede encontrar en http://www.sukria.net/perlconsole.html .

¡Espero que esto ayude!

15
Frank Wiles

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

   Perl -d -e 1
14
Clinton Pierce

He creado perli , a Perl REPL que se ejecuta en Linux, macOS y Windows .

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

Funciona independiente (no tiene dependencias aparte de Perl), pero la instalación de rlwrap es muy recomendable para admitir la edición de línea de comandos, el historial de comandos persistente , y tabulación - lea más aquí .

Instalación

  • Si tiene instalado Node.js:

    npm install -g perli
    
  • De otra manera:

    • Unix plataformas similares: descargue este script como perli a una carpeta en la ruta de su sistema y hágalo 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 a Perli como perli.pl, estás listo.
      De lo contrario, crea 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.

11
mklement0

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

11
Eric Johnson

Perl -d es tu amigo:

% Perl -de 0
6
Brian Phillips

re.pl de Devel :: REPL

6
Johny

Ciclo de lectura-evaluación-lectura:

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

Siempre lo hice

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

Con 5.10, he cambiado a:

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

Perl no tiene una consola, pero el depurador se puede usar como uno. En una solicitud de comando, 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 Perl Shell .

Para más información lea perlfaq3 .

4
Michael Carman

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

Está lleno en Shell (puedes usarlo en reemplazo de bash por ejemplo), pero usa la sintaxis de Perl ... para que puedas crear métodos sobre la marcha, etc.

3
shelfoo

Bajo Debian/Ubuntu:

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

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

Actualización: desde entonces he creado un REPL - ver mi otra respuesta .

Con el beneficio de la retrospectiva:

  • Las soluciones de terceros mencionadas entre las respuestas existentes son difíciles de instalar y/o no funcionan sin pasos adicionales no obvios, no obvios - algunas soluciones parecen estar en Al menos medio abandonado.
  • 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 - asegurando que este es un punto problemático para muchas soluciones de terceros.
  • Si instala CLIrlwrap, que proporciona soporte de línea de lectura a cualquier comando, puede combinarlo con un simple comando Perl para crear un REPL utilizable, y así hacerlo sin el tercero.REPL soluciones.
    • En OSX, puede instalar rlwrap a través de Homebrew con brew install rlwrap.
    • Las distribuciones de Linux deben 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 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, no obvios), espsh, pero:

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

  • su enfoque es diferente, ya que pretende ser un reemplazo de Shell, y por lo tanto funciona como un Shell tradicional, lo que significa que no evalúa automáticamente un comando como Perl instrucció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 puede mejorarse de una manera:

  • Por defecto, imprime arrays/lists/hashtables como escalar, es decir, solo imprime su elemento, mientras que sería útil enumerar sus elementos.

Si instala elData::Printermodule con [Sudo] cpan Data::Printer como una sola operación, puede cargarlo en REPL para usar la funciónp(), a la que puede pasar listas/arrays/hashtables para enumeración.

Aquí hay un alias llamado iperl con readline y Data::Printer support , que puede poner 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()//[email protected]'\'

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 es automáticamente impreso; p.ej.:

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

Matt Trout's overview enumera cinco opciones, a partir de 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 y pura de Perl que incluya Soporte de readline y persistencia léxica.

1
Davor Cubranic

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

0
Johny

Ver también Stylish REPL (para GNU Emacs) http://blog.jrock.us/articles/Stylish%20REPL.pod

0
Johny
0
runrig