Comment puis-je démarrer une console interactive pour Perl?

Comment puis-je démarrer une console interactive pour Perl, similaire à la commande irb pour Ruby ou python pour Python?

Vous pouvez utiliser le débogueur perl sur un programme sortingvial, comme ceci:

 perl -de1 

Sinon, il y a l’application Perl Console d’ Alexis Sukrieh , mais je ne l’ai pas utilisée.

Matt Trout a non seulement écrit un article sur un REPL, mais il en a même écrit un – Devel :: REPL

Je l’ai un peu utilisé et cela fonctionne assez bien, et il est en cours de développement.

BTW, je n’ai aucune idée de la raison pour laquelle quelqu’un a modifié la personne qui a mentionné l’utilisation de “perl -e” depuis la console. Ce n’est pas vraiment une REPL, c’est vrai, mais c’est extrêmement utile, et je l’utilise tout le temps.

J’ai écrit un script que j’appelle “psh”:

 #! /usr/bin/perl while (<>) { chomp; my $result = eval; print "$_ = $result\n"; } 

Quoi que vous tapiez, il est évalué 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 

Je pense que vous vous posez des questions sur une interface REPL (Read, Evaluate, Print, Loop) avec perl. Il y a quelques façons de le faire:

  • Matt Trout a un article qui décrit comment en écrire un
  • Adriano Ferreira a décrit quelques options
  • et enfin, vous pouvez aller sur IRC à irc.perl.org et essayer l’un des bots eval de nombreuses chaînes populaires. Ils évalueront les morceaux de perl que vous leur transmettez.

J’utilise la ligne de commande en tant que console:

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

Ensuite, je peux utiliser mon historique bash pour récupérer d’anciennes commandes. Cela ne préserve pas l’état, cependant.

Ce formulaire est le plus utile lorsque vous souhaitez tester “une petite chose” (comme pour répondre à des questions sur Perl). Souvent, je trouve ces commandes écrites dans un script shell ou un makefile.

Si vous voulez un historique, utilisez rlwrap . Cela pourrait être votre ~/bin/ips par exemple:

 #!/bin/sh echo 'This is Interactive Perl shell' rlwrap -A -pgreen -S"perl> " perl -wnE'say eval()//$@' 

Et voici à quoi ça ressemble:

 $ ips This is Interactive Perl shell perl> 2**128 3.40282366920938e+38 perl> 

Il n’y a pas de console interactive pour Perl intégrée comme Python. Vous pouvez toutefois utiliser le débogueur Perl pour effectuer des opérations de débogage. Vous l’activez avec l’option -d, mais vous pourriez vouloir extraire ‘man perldebug’ pour en savoir plus.

Après un peu de recherche sur Google, il existe un projet distinct qui implémente une console Perl que vous pouvez trouver sur http://www.sukria.net/perlconsole.html .

J’espère que cela t’aides!

Vous pouvez toujours accéder au débogueur intégré et exécuter des commandes à partir de là.

  perl -d -e 1 

Il existe deux REPLs Perl populaires.
1. Devel :: REPL est génial.
2. Mais IMO Reply est mieux.

J’ai créé perli , un REPL Perl qui fonctionne sous Linux, OS X et Windows .

Son objective est l’impression automatique de résultats, des recherches de documentation pratiques et une inspection facile des correspondances d’expression régulière.
Vous pouvez voir les captures d’écran ici .

Il fonctionne de manière autonome (sans autres dépendances que Perl lui-même), mais l’ installation de rlwrap est fortement recommandée pour prendre en charge la modification de la ligne de commande, l’historique des commandes persistantes et l’achèvement des tabulations.

Installation

  • Si vous avez installé Node.js:

     npm install -g perli 
  • Autrement:

    • Plates-formes de type Unix : Téléchargez ce script en tant que perli dans un dossier sur le chemin de votre système et rendez-le exécutable avec chmod +x .

    • Windows : Téléchargez ce script en tant que perli.pl (notez l’extension .pl ) dans un dossier sur le chemin de votre système.
      Si cela ne vous dérange pas d’invoquer Perli en tant que perli.pl , vous êtes prêt.
      Sinon, créez un fichier de commandes nommé perli.cmd dans le même dossier avec le contenu suivant: @%~dpn.pl %* ; cela permet l’invocation comme juste perli .

perl -d est ton ami:

 % perl -de 0 

re.pl de Devel :: REPL

J’ai toujours fait:

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

Avec 5.10, je suis passé à:

 perl -wnE'say eval()//$@' 

Perl n’a pas de console mais le débogueur peut être utilisé comme un seul. À l’invite de commandes, tapez perl -de 1 . (La valeur “1” n’a pas d’importance, c’est juste une déclaration valide qui ne fait rien.)

Il existe également quelques options pour un shell Perl .

Pour plus d’informations, lisez perlfaq3 .

Boucle lecture-évaluation-impression:

 $ perl -e'while(<>){print eval,"\n"}' 

Vous pouvez regarder dans psh ici: http://gnp.github.io/psh/

C’est un shell complet (vous pouvez l’utiliser en remplacement de bash par exemple), mais utilise la syntaxe Perl. Vous pouvez donc créer des méthodes à la volée, etc.

Mise à jour: J’ai depuis créé une REPL téléchargeable – voir mon autre réponse .

Avec le recul:

  • Les solutions tierces mentionnées parmi les réponses existantes sont lourdes à installer et / ou ne fonctionnent pas sans étapes supplémentaires non sortingviales et non évidentes – certaines solutions semblent être au moins à moitié abandonnées.
  • Une REPL utilisable nécessite la bibliothèque readline pour la prise en charge des claviers et la prise en charge de l’historique en ligne de commande , garantissant ainsi la disponibilité de nombreuses solutions tierces.
  • Si vous installez CLI rlwrap , qui fournit un support readline à toutes les commandes, vous pouvez le combiner avec une simple commande Perl pour créer une REPL utilisable , et vous débrouiller ainsi sans les solutions REPL tierces.
    • Sur OSX, vous pouvez installer rlwrap via Homebrew avec brew install rlwrap .
    • Les dissortingbutions Linux devraient offrir rlwrap via leurs gestionnaires de paquets respectifs; Par exemple, sur Ubuntu, utilisez sudo apt-get install rlwrap .
    • Voir la réponse de Ján Sáreník pour ladite combinaison de rlwrap et une commande Perl.

Qu’est-ce que vous ne recevez pas avec la réponse de Ján:

  • auto-complétion
  • pouvoir entrer des relevés multilignes

La seule solution tierce qui offre ces solutions (avec une installation non sortingviale + des étapes supplémentaires non évidentes) est psh , mais:

  • il n’a pas vu d’activité dans environ 2,5 ans

  • sa focalisation est différente en ce sens qu’elle se veut un remplacement de shell complet et fonctionne donc comme un shell traditionnel, ce qui signifie qu’elle n’évalue pas automatiquement une commande en tant qu’instruction Perl et nécessite une commande de sortie explicite telle que print pour imprimer le résultat d’une expression.


La réponse de Ján Sáreník peut être améliorée dans un sens:

  • Par défaut, il affiche les tableaux / listes / hashtables sous forme de scalaires , c’est-à-dire qu’ils impriment uniquement leur nombre d’éléments , alors qu’il serait utile d’énumérer leurs éléments à la place.

Si vous installez le module Data::Printer avec [sudo] cpan Data::Printer en une opération unique, vous pouvez le charger dans la REPL pour utiliser la fonction p() , à laquelle vous pouvez passer des listes / tableaux / hashtables pour le dénombrement.

Voici un alias nommé iperl avec le iperl readline et Data::Printer , que vous pouvez mettre dans le fichier d’initialisation de votre shell POSIX (par exemple, ~/.bashrc ):

 alias iperl='rlwrap -A -S "iperl> " perl -MData::Printer -wnE '\''BEGIN { say "# Use `p @` or `p %` to print arrays/lists/hashtables; eg: `p %ENV`"; } say eval()//$@'\' 

Par exemple, vous pouvez effectuer les opérations suivantes pour imprimer toutes les variables d’environnement via hashtable %ENV :

 $ iperl # start the REPL iperl> p %ENV # print key-value pairs in hashtable %ENV 

Comme pour la réponse de Ján, le résultat scalaire d’une expression est automatiquement imprimé; par exemple:

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

Sous Debian / Ubuntu:

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

La vue d’ ensemble de Matt Trout répertorie cinq choix, à partir de perl -de 0 et il recommande Reply , si l’extensibilité via des plugins est importante, ou tinyrepl d’ Eval::WithLexicals , pour une solution minimale pure qui inclut

Recherchez également ptkdb sur CPAN: http://search.cpan.org/search?query=ptkdb&mode=all

Sepia et PDE ont également leurs propres REPL (pour GNU Emacs).

Voir aussi Stylish REPL (pour GNU Emacs) http://blog.jrock.us/articles/Stylish%20REPL.pod