Comment démarrer une console interactive pour Perl?
-
09-06-2019 - |
Question
Comment démarrer une console interactive pour Perl, similaire à la commande irb
pour Ruby ou au python
pour Python?
La solution
Vous pouvez utiliser le débogueur Perl sur un programme trivial, comme suit:
perl -de1
Vous pouvez également utiliser la console Perl de la Alexis Sukrieh application, mais je ne l'ai pas utilisée.
Autres conseils
Non seulement Matt Trout a écrit un article sur un REPL, il en a écrit un - Devel :: REPL
Je l'ai utilisé un peu et cela fonctionne assez bien, et il est en développement actif.
BTW, je ne sais pas pourquoi quelqu'un modifie la personne qui a mentionné l'utilisation de " perl -e " de 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 intitulé "psh":
#! /usr/bin/perl
while (<>) {
chomp;
my $result = eval;
print " J'ai écrit un script intitulé "psh":
> 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
Quel que soit votre choix, il est évalué en Perl:
<*> = $result\n";
}
Quel que soit votre choix, il est évalué en Perl:
<*> Si vous souhaitez consulter l'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>
Je pense que vous parlez d'une interface REPL (lecture, évaluation, impression, boucle) vers perl. Il existe plusieurs façons de procéder:
- Matt Trout a un article qui décrit comment en écrire un
- Adriano Ferreira a décrit certaines options.
- et, enfin, vous pouvez aller sur IRC à l’adresse irc.perl.org et essayer l’un des bots eval de la plupart des chaînes populaires. Ils évalueront les morceaux de Perl que vous leur passerez.
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 conserve toutefois pas cet état.
Ce formulaire est particulièrement utile lorsque vous souhaitez tester "une petite chose". (comme lorsque vous répondez aux questions Perl). Je trouve souvent que ces commandes sont copiées textuellement dans un script shell ou un fichier makefile.
Il n’existe pas de console interactive pour Perl intégrée à celle de Python. Vous pouvez cependant utiliser le débogueur Perl pour effectuer des tâches de débogage liées. Vous l'activez avec l'option -d, mais vous voudrez peut-être consulter 'man perldebug' pour en savoir plus.
Après quelques recherches sur Google, un projet distinct implémentant une console Perl est disponible à l'adresse http://www.sukria.net/perlconsole.html .
J'espère que ça aide!
Vous pouvez toujours accéder au débogueur intégré et exécuter des commandes à partir de cet emplacement.
perl -d -e 1
Il existe deux REPL Perl populaires.
1. Devel :: REPL est génial.
2. Mais la réponse de l'OMI est meilleure.
J'ai créé perli
, un REPL Perl fonctionnant sous Linux, macOS et Windows .
L’accent est mis sur l’impression automatique des résultats, la recherche de documentation pratique et la
inspection des correspondances d'expression régulière.
Vous pouvez voir des captures d'écran ici .
Cela fonctionne en mode autonome (il n'a pas d'autres dépendances que Perl lui-même), mais l'installation de rlwrap
est vivement recommandé afin de prendre en charge l'édition en ligne de commande, l'historique des commandes persistantes et la complétion par des tabulations. Pour en savoir plus ici .
Installation
-
Si vous avez installé Node.js:
npm install -g perli
-
Sinon:
-
Unix comme sur les plates-formes: Téléchargez ce script en tant que
perli
dans un dossier du chemin de votre système et le rendre exécutable avecchmod + x
. -
Windows : téléchargez le ceci. script en tant que
perli.pl
(notez l'extension.pl
) dans un dossier du chemin de votre système.
Si cela ne vous dérange pas d'appeler Perli en tant queperli.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 d’appeler simplementperli
.
-
perl -d
est votre ami:
% perl -de 0
re.pl à partir de Devel :: REPL
je l'ai toujours fait:
perl -wlne'eval;print$@if$@'
Avec 5.10, je suis passé à:
perl -wnE'say eval()//$@'
Lecture-évaluation-boucle:
$ perl -e'while(<>){print eval,"\n"}'
Perl n’a pas de console, mais le débogueur peut être utilisé comme telle. À l'invite de commande, tapez perl -de 1
. (La valeur "1" n'a pas d'importance, c'est simplement une déclaration valide qui ne fait rien.)
Il existe également quelques options pour un Shell Perl .
Pour plus d'informations, consultez perlfaq3 .
Vous pouvez consulter 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 ... pour pouvoir créer des méthodes à la volée, etc.
Sous Debian / Ubuntu:
$ sudo apt-get install libdevel-repl-perl
$ re.pl
$ sudo apt-get install libapp-repl-perl
$ iperl
Mise à jour: j'ai depuis créé un REPL téléchargeable - voir mon autre réponse .
Avec le recul:
- Les solutions tierces mentionnées parmi les réponses existantes sont difficiles à installer et / ou ne fonctionnent pas sans étapes supplémentaires non triviales et non évidentes - certaines les solutions semblent être au moins à moitié abandonnées.
- Une REPL utilisable a besoin de la bibliothèque readline pour la prise en charge du clavier d'édition en ligne de commande et de l'historique - ce qui en fait un point noir pour de nombreuses solutions tierces.
- Si vous installez la CLI
rlwrap
, qui fournit un support readline à toute commande, vous pouvez la combiner avec une simple commande Perl pour créer un REPL utilisable , et ainsi faire sans solutions REPL tierces.- Sous OSX, vous pouvez installer
rlwrap
via Homebrew avecbrew install rlwrap
. - Les distributions Linux devraient offrir
rlwrap
via leurs gestionnaires de paquets respectifs; Par exemple, sous Ubuntu, utilisezsudo apt-get install rlwrap
. - Voir la réponse de J & # 225; s & # 225; ren & # 237; k pour ladite combinaison de
rlwrap
et une commande Perl.
- Sous OSX, vous pouvez installer
Ce que vous n'obtenez PAS avec la réponse de J & # 225; n:
- complétion automatique
- possibilité de saisir des déclarations multilignes
La seule solution tierce offrant ces fonctionnalités (avec une installation non triviale + des étapes supplémentaires non évidentes) est psh , mais
-
il n'a pas connu d'activité depuis environ deux ans et demi
-
son objectif est différent: il vise à être un remplacement de shell à part entière et fonctionne donc comme un shell traditionnel, ce qui signifie qu'il n'évalue pas automatiquement une commande une instruction Perl et requiert une commande de sortie explicite telle que
print
pour imprimer le résultat d'une expression.
réponse de J & # 225; S & # 225; ren & # 237; k peut être améliorée de la manière suivante:
- Par défaut, il affiche les tableaux / listes / tables de hachage sous forme de scalaires , c’est-à-dire qu’il affiche uniquement le nombre d’éléments , alors que ce serait pratique. pour é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 peut le charger dans le REPL pour l’utilisation de la fonction p ()
, à laquelle vous pouvez transmettre des listes / tableaux / hashtables pour une énumération.
Voici un alias nommé iperl
avec readline et le support Data :: Printer
, que vous pouvez insérer dans le fichier d'initialisation de votre shell, semblable à POSIX. (par exemple, ~ / .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()//$@'\'
ex., vous pouvez ensuite procéder comme suit pour imprimer toutes les variables d'environnement via la table de hachage % ENV
:
$ iperl # start the REPL
iperl> p %ENV # print key-value pairs in hashtable %ENV
Comme pour la réponse de J & # 225; n, le résultat scalaire d'une expression est automatiquement ; par exemple:
iperl> 22 / 7 # automatically print scalar result of expression: 3.14285714285714
perl -de 0
, il recommande Répondre
, si l'extensibilité via les plugins est importante, ou tinyrepl
à partir de Eval :: WithLexicals
, pour une solution minimale, pure-perl, incluant le support readline et la persistance lexicale. Recherchez également ptkdb sur CPAN: http://search.cpan.org/search?query=ptkdb&mode=all
Sepia et PDE possèdent également des REPL (pour GNU Emacs).
Voir aussi REPL élégant (pour GNU Emacs) http: //blog.jrock. nous / articles / Stylish% 20REPL.pod