Question

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

Était-ce utile?

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 avec chmod + 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 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 d’appeler simplement perli .

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 avec brew install rlwrap .
    • Les distributions Linux devraient offrir rlwrap via leurs gestionnaires de paquets respectifs; Par exemple, sous Ubuntu, utilisez sudo 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.

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.

La

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
La présentation de Matt Trout répertorie cinq choix, à partir de 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

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top