Réponses:
Vous pouvez utiliser le débogueur perl sur un programme trivial, comme ceci:
perl -de1
Sinon, il y a l' application Perl Console d' Alexis Sukrieh , mais je ne l'ai pas utilisée.
control
+ L
ne fonctionne pas sous cette interface de commande, comment dois-je rafraîchir l'écran?
rlwrap
). Toutes les solutions REPL / console tierces, y compris perlconsole
, sont lourdes à installer et ont souvent plus de limitations.
perl -de1
ne semble pas prendre en charge les my
variables, et les hachages ne fonctionnent pas non plus, pour une raison quelconque
perlconsole
ne souffre pas de ces problèmes.
Non seulement Matt Trout a écrit un article sur un REPL, mais il en a également écrit un - Devel :: REPL
Je l'ai un peu utilisé et cela fonctionne assez bien, et il est en cours de développement actif.
BTW, je n'ai aucune idée pourquoi quelqu'un a modifié la personne qui a mentionné l'utilisation de "perl -e" à partir de la console. Ce n'est pas vraiment un REPL, c'est vrai, mais c'est incroyablement utile, et je l'utilise tout le temps.
[sudo] cpan Devel::REPL
n'a pas fonctionné pour moi, ni sur OSX 10.10 (Perl 5.18.2) ni sur Ubuntu 14.04 (Perl 5.18.2): je reçois des erreurs d'exécution se plaignant des modules manquants; installé un, puis abandonné après qu'un autre module manquant a été signalé.
re.pl
auteur, a écrit un article énumérant plusieurs alternatives, et il suggère lui-même d'utiliser à la reply
place de re.pl
: shadow.cat/blog/matt-s-trout/mstpan-17
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 évalue 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
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>
alias iperl='rlwrap -A -S "perl> " perl -wnE '\''say eval()//$@'\'
. Les utilisateurs d'OSX peuvent installer rlwrap
via Homebrew avec brew install rlwrap
.
rlwrap -A -pgreen -S'perl> ' perl -MData::Dumper -wnE'say Dumper[eval()]//$@'
Je pense que vous posez des questions sur une interface REPL (lecture, évaluation, impression, boucle) pour 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 cependant pas l'état.
Ce formulaire est très utile lorsque vous souhaitez tester "une petite chose" (comme lorsque vous répondez à des questions Perl). Souvent, je trouve que ces commandes sont récupérées textuellement dans un script shell ou un makefile.
fish
vous n'avez même pas besoin de \n
.
Il n'y a pas de console interactive pour Perl intégrée comme le fait Python. Vous pouvez cependant utiliser le débogueur Perl pour effectuer des tâches liées au débogage. Vous l'allumez avec l'option -d, mais vous voudrez peut-être consulter '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 simplement passer dans le débogueur intégré et exécuter des commandes à partir de là.
perl -d -e 1
Il existe deux REPL Perl populaires.
sudo apt-get install libreply-perl
. Ensuite, il peut être exécuté simplement en tapant reply
dans un terminal.
J'ai créé perli
un REPL Perl qui fonctionne sous Linux, macOS et Windows .
Son objectif est l'impression automatique des résultats, des recherches de documentation pratiques et une inspection facile des correspondances d'expressions régulières.
Vous pouvez voir des captures d'écran ici .
Il 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ée afin de prendre en charge l'édition en ligne de commande, l'historique persistant des commandes et la complétion des tabulations - en savoir plus ici .
Installation
S'il vous arrive d'avoir Node.js installé:
npm install -g perli
Autrement:
Plates-formes de type Unix : téléchargez ce script dans perli
un dossier dans le chemin de votre système et rendez-le exécutable avec chmod +x
.
Windows : téléchargez le script en tant que perli.pl
(notez l' .pl
extension) dans un dossier dans le chemin de votre système.
Si cela ne vous dérange pas d'invoquer Perli as 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 une invocation aussi juste perli
.
perldoc
partir de perli
REPL comme 'someCommand ?'
. Il semble que cela n'ait pas été mis à jour depuis un certain temps, maintenez-vous toujours perli?
perli
n'a pas été mis à jour depuis un certain temps, car dans mon utilisation personnelle, je n'ai rencontré aucun problème, et peu d'autres personnes semblent l'utiliser, mais, pour autant que je sache, cela fonctionne toujours comme annoncé.
perl -d
est votre ami:
% perl -de 0
re.pl de Devel :: REPL
Boucle lecture-évaluation-impression:
$ perl -e'while(<>){print eval,"\n"}'
Perl n'a pas de console mais le débogueur peut être utilisé comme tel. À une 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 .
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 .. vous pouvez donc créer des méthodes à la volée, etc.
La vue d' ensemble de Matt Trout énumère cinq choix, à perl -de 0
partir de maintenant, 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 de la ligne de lecture et la persistance lexicale.
Mise à jour: j'ai depuis créé un REPL téléchargeable - voir mon autre réponse .
Avec le recul:
rlwrap
, qui fournit une prise en charge de la ligne de lecture à n'importe quelle commande, vous pouvez la combiner avec une simple commande Perl pour créer un REPL utilisable , et ainsi vous passer de 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.Ce que vous n'obtenez PAS avec la réponse de Ján:
La seule solution tierce qui les propose (avec une installation non triviale + étapes supplémentaires non évidentes), est psh , mais:
il n'a pas vu d'activité depuis environ 2,5 ans
son objectif est différent en ce qu'il vise à être un véritable remplacement de la coque , et fonctionne ainsi comme une coquille traditionnelle, ce qui signifie qu'il n'évalue pas automatiquement une commande en tant que Perl déclaration, et nécessite une commande de sortie explicite, comme print
à 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 Data::Printer
module avec [sudo] cpan Data::Printer
une opération unique, vous pouvez le charger dans le REPL pour utiliser la p()
fonction, à laquelle vous pouvez transmettre des listes / tableaux / tables de hachage pour l'énumération.
Voici un alias nommé iperl
avec readline et Data::Printer
support , que vous pouvez mettre dans le fichier d'initialisation de votre shell de type 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 effectuer les opérations suivantes pour imprimer toutes les variables d'environnement via une 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án, le résultat scalaire d'une expression est automatiquement imprimé; par exemple:
iperl> 22 / 7 # automatically print scalar result of expression: 3.14285714285714
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
Vous pouvez le faire en ligne (comme beaucoup de choses dans la vie) ici:
$ rlwrap perl -d -e 1
Vous obtiendrez l'historique et une invite cohérente