¿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?

Author: user2864740, 2008-09-16

22 answers

Puede usar el depurador perl en un programa trivial, así:

perl -de1

Alternativamente hay La aplicación Perl Console de Alexis Sukrieh, pero no la he usado.

 259
Author: Daniel Papasian,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-10-08 22:13:39

Matt Trout no solo escribió un artículo sobre un REPL, sino que 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 modded abajo de la persona que mencionó el uso de "perl-e" de la consola. Esto no es realmente un REPL, cierto, pero es fantásticamente útil, y lo uso todo el tiempo.

 56
Author: Dave Rolsky,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2008-09-16 16:16:11

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
 34
Author: raldi,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2008-09-16 19:44:29

Uso la línea de comandos como consola:

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

Entonces puedo usar mi historial bash para recuperar comandos antiguos. Sin embargo, esto no preserva el estado.

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

 19
Author: Jon Ericson,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2008-09-16 17:59:11

Creo que estás preguntando acerca de una interfaz REPL (Leer, Evaluar, Imprimir, Loop) 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 saltar a IRC en irc.perl.org y probar uno de los bots de evaluación en muchos de los canales populares. Evaluarán trozos de perl que les pases.
 19
Author: amoore,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-12-14 13:45:33

Si quieres historial, usa rlwrap. Esto 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()//$@'

Y así es como se ve:

$ ips
This is Interactive Perl shell
perl> 2**128
3.40282366920938e+38
perl> 
 17
Author: Ján Sáreník,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-04-03 14:07:39

No hay una consola interactiva para Perl integrada como Python. Sin embargo, puede usar el depurador de Perl para depurar cosas relacionadas. Lo enciendes con la opción-d, pero es posible que quieras revisar 'man perldebug' para aprender sobre ello.

Después de un poco de búsqueda 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
Author: Frank Wiles,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-08-09 01:32:06

Siempre puede entrar en el depurador integrado y ejecutar comandos desde allí.

   perl -d -e 1
 14
Author: Clinton Pierce,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2008-09-16 15:37:59

Hay dos réplicas populares de Perl.
1. Devel::REPL es grande.
2. Pero IMO Responder es mejor.

 9
Author: Eric Johnson,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-02-06 18:49:29

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

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

Funciona stand-alone (no tiene otras dependencias que Perl en sí), pero instalación de rlwrap se recomienda encarecidamente con el fin de apoyar la línea de comandos edición, historial de comandos persistentes, y tab - completion-read more aquí .

Instalación

  • Si tiene Nodo.js instalado:

    npm install -g perli
    
  • De lo contrario:

    • Unix-plataformas: Descargar este script como perli a una carpeta en la ruta del sistema y hacerlo ejecutable con chmod +x.

    • Windows : Descargue el este script como perli.pl (tenga en cuenta 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, 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.

 9
Author: mklement0,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-04-19 14:22:40

perl -d es su amigo:

% perl -de 0
 6
Author: Brian Phillips,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2008-09-16 15:37:37

Re.pl de Devel:: REPL

 6
Author: ,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2008-09-17 07:45:32

Siempre lo hice:

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

Con 5.10, he cambiado a:

perl -wnE'say eval()//$@'
 5
Author: ysth,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2008-09-18 10:48:08

Perl no tiene una consola, pero el depurador se puede usar como una. 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 Perl shell.

Para más información lea perlfaq3.

 4
Author: Michael Carman,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2008-09-16 15:46:40

Read-eval-print loop:

$ perl -e'while(<>){print eval,"\n"}'
 4
Author: KIM Taegyoon,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-09-17 07:28:32

Usted podría mirar en psh aquí: http://gnp.github.io/psh/

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

 2
Author: shelfoo,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-07-07 17:03:42

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

Con el beneficio de la retrospectiva:

  • Las soluciones de terceros mencionadas entre las respuestas existentes son engorrosas de instalar y/o no funcionan sin pasos adicionales no triviales y no obvios-algunas soluciones parecen estar al menos medio abandonadas.
  • Un REPL utilizable necesita la biblioteca readline para editar la línea de comandos compatibilidad con el teclado y el historial : asegúrese de que este es un punto problemático para muchas soluciones de terceros.
  • Si instala CLI rlwrap, que proporciona soporte readline a cualquier comando, puede combinarlo con un simple comando Perl para crear un REPL utilizable, y así prescindir de soluciones REPL de terceros.
    • 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 gestores 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
  • posibilidad de introducir sentencias multilínea

La única solución de terceros que ofrece estos (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 que apunta a ser un reemplazo completo del shell , y por lo tanto funciona como un shell tradicional, lo que significa que no evalúa automáticamente un comando como una instrucción 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 puede mejorarse de una manera:

  • De forma predeterminada, imprime matrices/listas / hashtables como escalares, es decir, solo imprime su element count, mientras que sería útil enumerar sus elementos en su lugar.

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

Aquí hay un alias llamado iperl con readline y Data::Printer soporte, que puede poner en el archivo de inicialización de su shell como POSIX (e. g., ~/.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 hashtable %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 resultado de una expresión es automáticamente impreso; por ejemplo:

iperl> 22 / 7  # automatically print scalar result of expression: 3.14285714285714
 2
Author: mklement0,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-05-23 12:10:42

Bajo Debian / Ubuntu:

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

$ sudo apt-get install libapp-repl-perl
$ iperl
 2
Author: gavenkoa,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-03-05 14:56:12

Matt Trout's overview enumera cinco opciones, desde perl -de 0 en adelante, y recomienda Reply, si la extensibilidad a través de plugins es importante, o tinyrepl desde Eval::WithLexicals, para una solución mínima de perl puro que incluye soporte readline y persistencia léxica.

 1
Author: Davor Cubranic,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-05-31 17:11:28
 0
Author: runrig,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2008-09-16 15:53:20

Sepia y PDE también tienen réplicas propias (para GNU Emacs).

 0
Author: ,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2008-09-17 07:47:13

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

 0
Author: ,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2008-09-18 05:54:52