Perl Console - Alexis Sukrieh

Transcription

Perl Console - Alexis Sukrieh
Perl Console
Votre compagnon
pour développer en Perl
Les Journées du Perl 2007
16, 17 novembre, Lyon
Alexis Sukrieh <[email protected]>
Plan
●
Pourquoi une console ?
●
Le modèle « Read-Eval-Print-Loop »
●
Dépendances et installation
●
Cas typiques d'utilisation
●
Configuration
●
●
Devel::REPL une implémentation plus
extensible
Pour la suite
Perl Console
Les Journées du Perl 2007
2
Pourquoi une console ?
« Let us then suppose the mind to be white
paper, void of all characters, without any
ideas; how comes it to be furnished? ....
To this I answer in one word, from
experience. »
John Locke (1632 - 1704)
Perl Console
Les Journées du Perl 2007
3
Pourquoi une console ?
John Locke,
L'Empirisme,
Les forgerons...
Une console pour expérimenter
Perl Console
Les Journées du Perl 2007
4
Pourquoi une console ?
●
parce que je ne veux pas écrire test.pl
●
parce que je veux vérifier une fonction
●
parce que je veux tester un module
●
parce que je veux explorer des structures
●
●
et je veux faire tout cela dynamiquement,
avec confort et avec use strict;
et je veux pouvoir exploiter au mieux toute
cette expérience, m'en servir pour coder
Perl Console
Les Journées du Perl 2007
5
Pourquoi une console ?
Bref, il me faut un environnement agréable
et interactif pour tester du code Perl, au
jour le jour.
Perl Console
Les Journées du Perl 2007
6
Le modèle REPL
loop( print( eval( read ) ) )
Perl Console
Les Journées du Perl 2007
7
Le modèle REPL : read
●
Saisie assistée avec Readline
–
historique
–
complétion
–
navigation (flèches, début, fin)
–
copié/collé
–
bref, tout ce que readline sait faire
Perl Console
Les Journées du Perl 2007
8
Le modèle REPL : eval
●
●
Evaluation évoluée du code saisi
–
chargement dynamique de module
–
espace de nom propre (use strict)
–
phase de compilation
–
phase d'évaluation
Nous sommes au plus près d'une
évaluation d'un script perl
Perl Console
Les Journées du Perl 2007
9
Le modèle REPL : print
●
Différents mode de sortie du résultat grâce
à la préférence « output »
–
scalaire (défaut)
–
Data::Dumper
–
Data::Dump
–
YAML
–
Data::Dump::Serializer
Perl Console
Les Journées du Perl 2007
10
PerlConsole
Examen de PerlConsole,
un programme REPL en Perl, pour Perl
Perl Console
Les Journées du Perl 2007
11
Bref historique de Perl Console
●
console.pl : une boucle REPL basique
●
PerlConsole 0.1 : console.pl avec Readline
●
●
PerlConsole 0.2 : réécriture objet,
configuration, préférences, sorties, ...
PerlConsole 0.3 : améliorations inspirées
de Devel::REPL, notamment
l'environnement Lexical
Perl Console
Les Journées du Perl 2007
12
Dépendances & Installation
Disséquons le chameau mécanique !
Perl Console
Les Journées du Perl 2007
13
Dépendances
●
Term::ReadLine
●
Getopt::Long
●
Module::Refresh
●
Lexical::Persistence
●
4 modules pour un confort d'utilisation
idéal sans une myriade de dépendances
Perl Console
Les Journées du Perl 2007
14
Term::ReadLine
●
●
●
●
Saisie gérée par Readline
Complétion sur les symboles exportés par
les modules chargés
Complétion sur les variables déclarées
Historique des commandes sauvé dans
~/.perlconsole_history
Perl Console
Les Journées du Perl 2007
15
Getopt::Long
–Lecture
Perl Console
des arguments de la ligne de
commande
Les Journées du Perl 2007
16
Module::Refresh
–Tout
module chargé dans la console sera
automatiquement rechargé lorsque le
fichier change sur le disque.
Perl Console
Les Journées du Perl 2007
17
Lexical::Persistence
●
●
Un module précieux pour faire vivre les
variables de l'utilisateur d'une ligne à
l'autre
C'est grâce à ce module que la console
tourne en mode strict : chaque ligne est
évaluée sous use strict, dans notre
environnement lexical (qui perdure).
Perl Console
Les Journées du Perl 2007
18
Installer PerlConsole
●
Sur Debian (sid) :
–
●
Sur FreeBSD
–
●
apt-get install perlconsole
cd /usr/ports/devel/perlconsole && make
install clean
Avec le CPAN :
–
–
cpan install PerlConsole
http://search.cpan.org/dist/perlconsole/
Perl Console
Les Journées du Perl 2007
19
Cas d'utilisation
Rapidement, quelques cas réels et
fréquents où Perl Console est précieux...
Perl Console
Les Journées du Perl 2007
20
Cas d'utilisation
Je veux tester un petit bout de code
rapidement :
Perl> substr("FPW::Lyon 2007", 5, 4)
"Lyon"
Perl>
Perl Console
Les Journées du Perl 2007
21
Cas d'utilisation
Je veux charger un module, et le tester
avant de m'en servir dans mon code (après
avoir lu sa documentation par exemple)
Perl> use File::Spec
Perl> File::Spec->rel2abs(".")
"/home/sukria"
Perl>
Perl Console
Les Journées du Perl 2007
22
Cas d'utilisation
Je veux développer un module et le tester
au fur et à mesure des changements (Perl
Console recharge tout seul le module
lorsqu'il change)
Perl> use MonModule
Perl> ma_fonction('foo')
1
Perl> ...
Perl Console
Les Journées du Perl 2007
23
Cas d'utilisation
Mes sessions de Perl Console peuvent servir
de base pour mes tests unitaires
Perl Console
Les Journées du Perl 2007
24
Configuration
De la configuration pour une console ?
Oui ! Juste un zeste ;-)
Perl Console
Les Journées du Perl 2007
25
Commandes PerlConsole
●
●
Toute ligne commençant par « : » définit
une commande PerlConsole
Dans la version actuelle (0.3) il y a peu de
commandes mais elle ont leur utilité, nous
allons les détailler.
Perl Console
Les Journées du Perl 2007
26
:help == Aide en ligne
●
●
●
Une aide en ligne est disponible grâce à la
commande :help
Sans argument, la commande d'aide affiche
les sujets d'aide disponibles
Dans la version 0.3 il n'y en a qu'un seul : «
preferences »
Perl Console
Les Journées du Perl 2007
27
Les préférences
●
●
En prévision des versions futures, la
console embarque un petit système de
préférences
L'utilisateur peut assigner une valeur à une
préférence avec la commande :set
<pref> = <val>
Perl Console
Les Journées du Perl 2007
28
Des Préférences ?
Perl> :help preferences
You can set a preference in the
console with the following syntax:
:set <preference>=<value>
Available preferences are:
- output
see :help <preference> for details.
Perl Console
Les Journées du Perl 2007
29
Des Préférences ?
●
●
●
●
Les préférences sont des couples clefvaleur
Elles sont prévues pour laisser l'utilisateur
intervenir simplement sur le comportement
de la console
On les définit avec :set pref = val
La seule préférence disponible dans la
version 0.3 est « output »
Perl Console
Les Journées du Perl 2007
30
:set output = ...
●
●
La préférence output permet de choisir le
mode de sortie des évaluations de la
console
L'aide en ligne de la préférence output
nous permet de connaître toutes les
valeurs possible :
Perl Console
Les Journées du Perl 2007
31
:help output
Perl> :help output
Valid values for preference "output"
are: scalar, dumper, yaml, dump, dds
Perl>
Perl Console
Les Journées du Perl 2007
32
Choisir le mode de sortie
●
●
●
Choisir le mode de sortie revient donc à
positionner la valeur de notre choix pour la
préférence output :
Perl> :set output = dds
Attention cependant, certains modes de
sortie reposent sur des modules tiers, il
vous faudra donc avoir ces modules pour
que le changement soit validé.
Perl Console
Les Journées du Perl 2007
33
Créer un profil de démarrage
●
●
●
●
Il peut être intéressant de lancer plusieurs
commandes au lancement de la console
Définir une préférence (choisir son mode
de sortie préféré)
Charger quelques modules que l'on utilise
fréquemment
Définir quelques variables, instancier
quelques objets, ...
Perl Console
Les Journées du Perl 2007
34
~/.perlconsolerc
●
●
●
Tout ce qui est présent dans le fichier
~/.perlconsolerc est évalué de la même
manière que si c'était évalué dans la
console
Code Perl et commandes PerlConsole
seront donc interprétés au démarrage de la
console
On peut se créer plusieurs profils et en
choisir un avec l'option --rcfile
Perl Console
Les Journées du Perl 2007
35
Exemple de profil
$ cat ~/.perlconsolerc
:set output = dds
use MonModule;
use MaClasse;
use DBI;
my $dbh = DBI->connect(...);
my $obj = new MaClasse;
Perl Console
Les Journées du Perl 2007
36
Plus loin avec Devel::REPL
●
Une console écrite en Moose
●
Très modulaire, avec le support de plugins
●
Déjà riche de nombreux plugins
●
Avec une notion de Profils (groupement de
plugins)
●
Ecrite par Matt S. Trout
●
Un seul bémol : toutes ses dépendances
Perl Console
Les Journées du Perl 2007
37
Devel::REPL
–Une
solution idéale pour un développeur
qui souhaite personnaliser sa console en
profondeur
Perl Console
Les Journées du Perl 2007
38
La suite de PerlConsole
●
●
●
Dans l'ensemble la console répond au
besoin
Un manque : le support des expressions
multi-lignes (peut-être dans la 0.4)
PerlConsole ne vise pas à grandir plus que
nécessaire cependant : Devel::REPL est là
pour les demandes plus fines
Perl Console
Les Journées du Perl 2007
39
Quelques pointeurs
●
Page CPAN :
http://search.cpan.org/dist/perlconsole/
●
●
Repository SVN :
svn://www.sukria.net/perlconsole
Page Web :
http://www.sukria.net/perlconsole.html
Perl Console
Les Journées du Perl 2007
40
Merci !
Perl> :quit
Perl Console
Les Journées du Perl 2007
41