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:
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:
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.
rlwrap
via Homebrew avec brew install rlwrap
. rlwrap
via leurs gestionnaires de paquets respectifs; Par exemple, sur Ubuntu, utilisez sudo apt-get install rlwrap
. rlwrap
et une commande Perl. Qu’est-ce que vous ne recevez pas avec la réponse de Ján:
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:
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