web-dev-qa-db-fra.com

Comment démarrer une console interactive pour Perl?

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

249
ibz

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.

280
Daniel Papasian

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.

59
Dave Rolsky

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
34
raldi

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> 
23
Ján Sáreník

Je pense que vous parlez d'une interface REPL (Lire, Évaluer, Imprimer, Boucler) avec Perl. Il y a quelques façons de le faire:

  • Matt Trout a n article qui décrit comment en écrire un
  • Adriano Ferreira a décrit quelques options
  • et enfin, vous pouvez aller sur IRC à l'adresse irc.Perl.org et essayer l'un des robots d'évaluation dans de nombreuses chaînes populaires. Ils évalueront les morceaux de Perl que vous leur passerez.
20
amoore

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.

19
Jon Ericson

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!

15
Frank Wiles

Vous pouvez toujours simplement accéder au débogueur intégré et exécuter des commandes à partir de là.

   Perl -d -e 1
14
Clinton Pierce

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.

11
mklement0

Il existe deux types de REPL Perl populaires.

  1. Devel :: REPL est génial.
  2. Mais IMO Reply est meilleur.
11
Eric Johnson

Perl -d est votre ami:

% Perl -de 0
6
Brian Phillips

re.pl de Devel :: REPL

6
Johny

Lecture-eval-boucle d'impression:

$ Perl -e'while(<>){print eval,"\n"}'
5
KIM Taegyoon

J'ai toujours fait:

Perl -wlne'eval;print$@if$@'

Avec 5.10, je suis passé à:

Perl -wnE'say eval()//$@'
5
ysth

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.

4
shelfoo

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 .

4
Michael Carman

Sous Debian/Ubuntu:

$ Sudo apt-get install libdevel-repl-Perl
$ re.pl

$ Sudo apt-get install libapp-repl-Perl
$ iperl
3
gavenkoa

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 fastidieuses à installer et/ou ne fonctionnent pas sans -triviales, étapes supplémentaires non évidentes - certaines solutions semblent être au moins à moitié abandonnées.
  • Un utilisateur utilisable REPL 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 est un problème pour de nombreuses solutions tierces.
  • Si vous installez CLI 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.
    • Sur 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 réponse de Ján Sáreník pour ladite combinaison de rlwrap et une commande Perl.

Ce que vous n'obtenez PAS avec la réponse de Ján:

  • auto-complétion
  • possibilité d'entrer des relevés multilignes

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:

  • Par défaut, il imprime les tableaux/listes/hashtables sous forme de scalaires , c’est-à-dire qu’ils n’impriment que leurs nombre d'éléments , alors qu'il serait pratique d'énumérer leurs éléments à la place.

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
_
2
mklement0

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.

1
Davor Cubranic

Sepia et PDE possèdent également des REPL (pour GNU Emacs).

0
Johny

Voir aussi Stylish REPL (pour GNU Emacs) http://blog.jrock.us/articles/Stylish%20REPL.pod

0
Johny

Recherchez également ptkdb sur le réseau CPAN: http://search.cpan.org/search?query=ptkdb&mode=all

0
runrig