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