Comment 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 trivial, comme ceci:
Perl -de1
Sinon, il y a l'application Alexis Sukrieh de Perl , mais je ne l'ai pas utilisée.
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 modded 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 incroyablement 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";
}
Quel que soit votre choix, 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
Si vous voulez 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 (Lire, Évaluer, Imprimer, Boucler) avec Perl. Il y a quelques façons de le faire:
J'utilise la ligne de commande comme console:
$ Perl -e 'print "JAPH\n"'
Ensuite, je peux utiliser mon historique bash pour récupérer les anciennes commandes. Cela ne préserve pas l'état, cependant.
Ce formulaire est particulièrement utile lorsque vous souhaitez tester "une petite chose" (comme lorsque vous répondez à des questions Perl). Souvent, je trouve que ces commandes sont copiées textuellement dans un script shell ou un fichier makefile.
Comme Python, il n'y a pas de console interactive Perl intégrée. 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 un peu de recherche sur Google, un projet distinct implémentant une console Perl est disponible à l'adresse suivante: http: //www.sukria.net/perlconsole.html .
J'espère que cela t'aides!
Vous pouvez toujours simplement accéder au débogueur intégré et exécuter des commandes à partir de là.
Perl -d -e 1
J'ai créé perli
, un Perl REPL qui s'exécute sur Linux, macOS, et Windows .
Son objectif est l’impression automatique des résultats, la recherche de documentation pratique et l’inspection facile des correspondances d’expression régulière.
Vous pouvez voir des captures d'écran ici .
Cela fonctionne de manière autonome (n'a pas de dépendances autres que Perl lui-même), mais l'installation de rlwrap
est fortement recommandé afin de prendre en charge l’édition en ligne de commande, l’historique des commandes persistant et la complétion par des tabulations - en savoir plus ici .
Installation
Si vous avez installé Node.js:
npm install -g perli
Autrement:
Unix - comme les plateformes: Téléchargez ce script sous la forme perli
dans un dossier du chemin de votre système et rendez-le exécutable avec chmod +x
.
Windows : Téléchargez le ce 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'invoquer Perli en tant que perli.pl
, tout est 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 simplement perli
.
Il existe deux types de REPL Perl populaires.
Perl -d
est votre ami:
% Perl -de 0
re.pl de Devel :: REPL
Lecture-eval-boucle d'impression:
$ Perl -e'while(<>){print eval,"\n"}'
J'ai toujours fait:
Perl -wlne'eval;print$@if$@'
Avec 5.10, je suis passé à:
Perl -wnE'say eval()//$@'
Vous pouvez regarder dans psh ici: http://gnp.github.io/psh/
C'est une version complète de Shell (vous pouvez l'utiliser en remplacement de bash par exemple), mais utilise la syntaxe Perl. Vous pouvez ainsi créer des méthodes à la volée, etc.
Perl n'a pas de console, mais le débogueur peut être utilisé comme une. À l'invite de commande, 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 Perl Shell .
Pour plus d'informations, lisez perlfaq .
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:
rlwrap
, qui fournit un support readline à toutes les commandes, vous pouvez les combiner avec une simple commande Perl pour créer un REPL utilisable , et ainsi faire face à des solutions tierces REPL. rlwrap
via Homebrew avec _brew install rlwrap
_.rlwrap
via leurs gestionnaires de paquets respectifs; Par exemple, sous Ubuntu, utilisez _Sudo apt-get install rlwrap
_.rlwrap
et une commande Perl. Ce que vous n'obtenez PAS avec la réponse de Ján:
La seule solution tierce proposant ces solutions (avec une installation non triviale + des étapes supplémentaires non évidentes) est psh, mais:
il n'a pas vu d'activité dans environ 2,5 ans
son objectif est différent en ce sens qu'il vise à être un remplacement à part entière du shell , et fonctionne donc comme un shell traditionnel, ce qui signifie qu'il n'évalue pas automatiquement une commande en tant que Perl et requiert 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 d'une manière:
Si vous installez le module Data::Printer
avec _[Sudo] cpan Data::Printer
_ en une fois, vous pouvez le charger dans le REPL pour l’utilisation de la fonction p()
, à laquelle vous pouvez passer 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 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()//$@'\'
_
Par exemple, 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 avec 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
_
Matt Trout's overview répertorie cinq choix, à partir de Perl -de 0
et suit, et il recommande Reply
, si l’extensibilité via des plugins est importante, ou tinyrepl
à partir de Eval::WithLexicals
, pour une solution minimale, pure-Perl, qui inclut le support readline et la persistance lexicale.
Sepia et PDE possèdent également des REPL (pour GNU Emacs).
Voir aussi Stylish REPL (pour GNU Emacs) http://blog.jrock.us/articles/Stylish%20REPL.pod
Recherchez également ptkdb sur le réseau CPAN: http://search.cpan.org/search?query=ptkdb&mode=all