Langage Perl. Introduction & Retour d'expérience. Journée du 30/11/2010 - S. Gallina - GEPV - 1/42



Documents pareils
Introduction à la présentation graphique avec xmgrace

Configurer la supervision pour une base MS SQL Server Viadéis Services

INFO-F-404 : Techniques avancées de systèmes d exploitation

Dans l'article précédent, vous avez appris

Perl Orienté Objet BioPerl There is more than one way to do it

Introduction à MATLAB R

Exonet : sauvegarde automatisée d une base de données

Comment reproduire les résultats de l article : POP-Java : Parallélisme et distribution orienté objet

Langage propre à Oracle basé sur ADA. Offre une extension procédurale à SQL

Gestion de stock pour un magasin

BIRT (Business Intelligence and Reporting Tools)

Présentation du PL/SQL

Programmation Web. Madalina Croitoru IUT Montpellier

SOFI Gestion+ Version 5.4. Echanges de données informatiques Spicers Sofi gestion+ Groupements. SOFI Informatique. Actualisé le

TD3 - Facturation avec archivage automatisé

EXCEL TUTORIEL 2012/2013

Request Tracker pour les Nuls. Yves Agostini - YVESAGO

BASE. Vous avez alors accès à un ensemble de fonctionnalités explicitées ci-dessous :

Perl Console. Votre compagnon pour développer en Perl. Les Journées du Perl , 17 novembre, Lyon. Alexis Sukrieh

Tutoriel Création d une source Cydia et compilation des packages sous Linux

Environnements informatiques

Mysql. Les requêtes préparées Prepared statements

JAB, une backdoor pour réseau Win32 inconnu

Le service FTP. M.BOUABID, Page 1 sur 5

CONFIGURATION DU SERVEUR DE MAILS EXIM. par. G.Haberer, A.Peuch, P.Saade

laposte.net) Ministère de l'éducation nationale Atelier sécurité Rabat RALL 2007

Gestion collaborative de documents

27/11/12 Nature. SDK Python et Java pour le développement de services ACCORD Module(s)

L3 informatique TP n o 2 : Les applications réseau

Présentation, mise en place, et administration d'ocs Inventory et de GLPI

Attaques applicatives

ACTIVITÉ DE PROGRAMMATION

Programmation VBA/Excel. Programmation VBA. Pierre BONNET. Masters SMaRT & GSI - Supervision Industrielle P. Bonnet

Hébergement de site web Damien Nouvel

La Voix sur IP. Études des solutions logicielles. Open Source

Chapitre 1 Qu est-ce qu une expression régulière?

Conventions d écriture et outils de mise au point

La Clé informatique. Formation Excel XP Aide-mémoire

Résoudre les problèmes PHP, les meilleures (et les pires) techniques

Outils pour la pratique

TP 1. Prise en main du langage Python

Installation d'un serveur FTP géré par une base de données MySQL

td3a correction session7az

Plan Général Prévisionnel (1/2) (non contractuel) Internet et Outils L1/IO S2-IO2 Bases de données: Jointures, Transactions

Centre CPGE TSI - Safi 2010/2011. Algorithmique et programmation :

Les Utilisateurs dans SharePoint

LES TYPES DE DONNÉES DU LANGAGE PASCAL

Tenrox. Guide d intégration Tenrox-Salesforce. Janvier Tenrox. Tous droits réservés.

Network Shutdown Module V3 Extension du Manuel Utilisateur pour architecture Virtualisée VMWare ESX Server 3, 3.5

Initiation à LabView : Les exemples d applications :

Open Source Job Scheduler. Installation(s)

Pratique et administration des systèmes

VXPERT SYSTEMES. CITRIX NETSCALER 10.1 et SMS PASSCODE 6.2. Guide d installation et de configuration pour Xenapp 6.5 avec SMS PASSCODE 6.

Installation et Mise en œuvre de MySQL

Plan du cours Cours théoriques. 29 septembre 2014

sshgate Patrick Guiran Chef de projet support

BTS S.I.O PHP OBJET. Module SLAM4. Nom du fichier : PHPRévisionObjetV2.odt Auteur : Pierre Barais

Python Les fondamentaux du langage

SRAL Saint Raphaël. Maison des associations 213, rue de la Soleillette Saint Raphaël. : : dromain.jean-pierre@neuf.

EPREUVE PRATIQUE DES TECHNIQUES INFORMATIQUES ACTIVITE N 1. Thème de l activité : Configuration d un firewall

Projet Administration Réseaux

OUTIL DE TRAVAIL COLLABORATIF

Retour d'expérience avec : OCS Inventory & GLP

Table des matières PRESENTATION DU LANGAGE DS2 ET DE SES APPLICATIONS. Introduction

IMPORTATION ARTICLES DANS LA BASE DE DONNEES

Manuel Viadeis CRM Connecteur intégration L100 étendue.

Vue d ensemble de Windows PowerShell

IMPORTATION, CRÉATION, MANIPULATION, EXPORTATION DE DONNÉES STATISTIQUES

Gestion de données avec TALEND

Introduction au Système d Exploitation Unix/Linux

8. Gestionnaire de budgets

GUIDE UTILISATEUR ENVOYEZ ET RECEVEZ VOS SMS PAR

Cours iguess. inotes v10.1

FreeAnalysis. Schema Designer. Cubes

Séance 0 : Linux + Octave : le compromis idéal

1. Structure d'un programme FORTRAN 95

as Architecture des Systèmes d Information

Cours d algorithmique pour la classe de 2nde

Tutoriel: Création d'un Web service en C++ avec WebContentC++Framework

Algorithmique et Programmation, IMA

Introduction aux SGBDR

Exploiter les statistiques d utilisation de SQL Server 2008 R2 Reporting Services

Cursus Sage ERP X3 Outils & Développement. Le parcours pédagogique Sage ERP X3 Outils et Développement

Formation Cloudera Data Analyst Utiliser Pig, Hive et Impala avec Hadoop

Utilisation de JAVA coté Application serveur couplé avec Oracle Forms Hafed Benteftifa Novembre 2008

Note de cours. Introduction à Excel 2007

Mise en route et support Envision 10 SQL server (Avril 2015) A l'intention de l'administrateur SQL Server et de l administrateur Envision

Les bases de données

WINDOWS SHAREPOINT SERVICES 2007

Initiation à la programmation en Python

URECA Initiation Matlab 2 Laurent Ott. Initiation Matlab 2

INTERNET est un RESEAU D ORDINATEURS RELIES ENTRE EUX A L ECHELLE PLANETAIRE. Internet : interconnexion de réseaux (anglais : net = réseau)

Performances. Gestion des serveurs (2/2) Clustering. Grid Computing

Introduction à JDBC. Accès aux bases de données en Java

Cours 1 : Introduction. Langages objets. but du module. contrôle des connaissances. Pourquoi Java? présentation du module. Présentation de Java

TP1 - Prise en main de l environnement Unix.

Mysql avec EasyPhp. 1 er mars 2006

TABLEAU CROISE DYNAMIQUE

Transcription:

Langage Perl Introduction & Retour d'expérience Journée du 30/11/2010 - S. Gallina - GEPV - 1/42

Perl Practical Extraction and Report Langage Langage de script (non compilé) Conçu par Larry Wall Enrichi par de nombreux développeurs => 18700 packages en 2010 DB, web, graphique, analyse de trace apache, fichier excel Domaines spécifiques : ex BioPerl pour la biologie Perl5 (1994), Perl5.10 (2009) => compatibilité des programmes depuis 1994 Journée du 30/11/2010 - S. Gallina - GEPV - 2/42

Objectifs du langage Combiner les avantages de 3 langages Shell => simplicité, langage interprété C => structures de contrôles et structures de données Awk => expressions régulières (manipulation de texte) Fonctionnalités supplémentaires + tableaux associatifs : tableaux indicé par une chaîne de caractères + gestion de la mémoire (automatisée) Journée du 30/11/2010 - S. Gallina - GEPV - 3/42

Tâche simple : ex1 #!/usr/bin/sh cp f1.txt /local/data chmod a+r /local/data/f1.txt #!/usr/bin/perl system("cp f1.txt /local/data"); chmod a+r "/local/data/f1.txt"; Pas de compilation Pas de déclaration de fonction ni de déclaration de variable Très semblable au shell Journée du 30/11/2010 - S. Gallina - GEPV - 4/42

Tâche simple : ex2 #!/usr/bin/sh for file in *.txt do if [! -f test1/$file ] do cp $file test1 chmod a+r test1/$file done done #!/usr/bin/perl for $file (<*.txt>) { if (! -f test1/$file) { system("cp $file test1"); chmod a+r "test1/$file"; Utilisation de structure de contrôle for, if,! Et de test sur les fichiers -f (vrai si le fichier existe) Programmeur shell => perl Journée du 30/11/2010 - S. Gallina - GEPV - 5/42

Utilisation de packages ou modules Tous les modules sont regroupés sur le CPAN Comprehensive Perl Archive Network http://www.cpan.org Exemple 1: LWP::Simple LWP = Library World-Wide Web pour Perl Fonction get retourne le contenu d'un URL #!/usr/bin/perl use LWP::Simple; print(get("ftp://ftp.cpan.org/cpan/readme")); Journée du 30/11/2010 - S. Gallina - GEPV - 6/42

Utilisation de package objet Exemple 2 : package Net::FTP Utilisation avec une syntaxe objet objet = class->new objet->methode #!/usr/bin/perl use Net::FTP; $ftp = Net::FTP->new("ftp.cpan.org") or die("$!"); $ftp->login("anonymous",'-anonymous@'); $ftp->cwd("/pub/cpan/"); $ftp->get("ls-lr.gz"); $ftp->quit(); Journée du 30/11/2010 - S. Gallina - GEPV - 7/42

Programmes plus complexes ~ programmes C, java etc... Structures de contrôle if, for, while, next etc... Fonctions variables locales, globales Structures de données Tableaux, tableaux associatifs Références (pointeurs), objets Expressions régulières Description de chaines de caractères Journée du 30/11/2010 - S. Gallina - GEPV - 8/42

Expressions régulières :-\ Permet de décrire (match) une chaîne de caractères $variable =~ /expression régulière/ Est-ce que ma variable - contient une tablutation? - contient un ou plusiurs chiffres? - commence par le caractère # On peut décrire : 1 caractère spécial : \n \t Classe de caractères : \d (digit) : un chiffre [0-9] \s (space) = espacement (blanc ou tabulation) Position: ^ = début de chaîne, $ = fin de chaîne Répétition : * = le caractère précédent répété 0 à N fois A* = 0 ou plusieurs fois A : A, AA, AAA \d* = 0 ou plusieurs chiffres (un nombre) : 1234, 56 Alternative : exemple FR US UK $var1 =~ /ABC\d*/ ABC suivi de 0 ou N chiffres $var2 =~ /FR UK/ Alternative $var3 =~ /^\s*$/ Début de chaîne 1 espace Fin de chaîne 0 ou N fois Journée du 30/11/2010 - S. Gallina - GEPV - 9/42

Utilité des expressions régulières Filtrer certaines lignes d'un fichier Control de qualité sur des données Vérifier les valeurs saisies par un utilisateur Découper et vérifier une chaîne en plusieurs parties Adresse mail Vérification : uniquement des lettres, chiffres et quelques symboles autorisés, 1 seule fois @ Découpage : user + domaine Journée du 30/11/2010 - S. Gallina - GEPV - 10/42

Structures de données Types de variables Nom des variables Gestion de la mémoire Tableau Tableau associatif Journée du 30/11/2010 - S. Gallina - GEPV - 11/42

3 types de variables Scalaire Numérique, chaîne Tableau (liste, vecteur) Suite ordonnée 42 Fichier1.txt 0.374e+08 Indice Valeur Indice Valeur 0 37 0 503 1 58 1 fichier1.txt 2 3 2 fichier2.txt 3 72 3 fichier3.txt Tableau associatif Ensemble de couples (clé, valeur) Clé rouge vert bleu Valeur 0x00F 0x0F0 0x00F Clé Valeur position chr3:1000-1400 score 0.374e+08 annnotation Gene A Journée du 30/11/2010 - S. Gallina - GEPV - 12/42

Noms de variables Toujours préfixé par un symbole indiquant le type $a : scalaire (chaîne ou numérique) @tab : tableau (indicé par des entiers) %hash : tableau associatif (indicé par des chaînes) :-\ Utilisation globale $a = "/usr/local/bin"; @tab = ("fichier1", "fichier2", "fichier3"); %hash = ("rouge" => 0x00F, "vert" => 0x0F0, "bleu" => 0x00F); 1 élément d'un tableau est 1 scalaire $i = $tab[2]; $j = $hash{"rouge"; :-O Attention : $a, @a, %a = 3 variables différentes Journée du 30/11/2010 - S. Gallina - GEPV - 13/42

Gestion de la mémoire Allocation et libération de mémoire automatiques :-) $tab[3] = "abcd" Allocation d'un tableau de taille 4 Tous les éléments contiennent une valeur nulle sauf le 3 $tab[1000000] = "efgh" Agrandissement automatique du tableau Seuls 2 éléments contiennent une valeur En interne, éventuellement certaines parties du tableau ne sont alloués que lorsqu'on y place une valeur Journée du 30/11/2010 - S. Gallina - GEPV - 14/42

Tableau <=> Liste Utilisation avec des indices : classique $tab[1] = 25; Utilisation sans indice numérique : liste :-) push @tab, $element : rajouter un élément à la fin $element = shift @tab : extraire le 1er élément et décaler le tableau for $element (@tab) { : parcourir les éléments $sum += $element; Journée du 30/11/2010 - S. Gallina - GEPV - 15/42

Tableau Associatif Ensemble de couples (clé, valeur) Permet d'avoir des chaînes comme indice + simples Exemple %user_group = ("cecile" => "stat", "loic" => "stat"); "stefan" => "devel", "david" => "admin"); :-) $user_group{"sophie" = "guest"; @user = keys(%user_group); Liste de toutes les clés Journée du 30/11/2010 - S. Gallina - GEPV - 16/42

Tableau Associatif exemple 2 Dans un dossier, compter le nombre de fichiers pour chaque type d'extension :-) Utilise directement le nom de l'extension Pas besoin de connaître la liste des extensions à l'avance Allocation dynamique des éléments du tableau Initialisation à 0 => OK pour l'incrémentation #!/usr/bin/perl for $fichier (<*>) { ($nom, $ext) = split(/\./, $fichier); $compte{$ext++; for $ext (sort keys(%compte)) { print ".$ext : $compte{$ext\n";.csv : 1.pl : 10.png : 3.xls : 2 Journée du 30/11/2010 - S. Gallina - GEPV - 17/42

Tableaux associatifs à N dimensions :-) for $user ("cecile", "david", "stefan") { for $month ("janvier", "fevrier", "mars") { $planning{$user, $month = "busy!"; for $i (1.. 10) { for $j (1.. 100) { for $k (10.. 20) { $result{$i, $j, $k = mon_calcul($i, $j, $k); Journée du 30/11/2010 - S. Gallina - GEPV - 18/42

Package + structure de données DBI => Base de données Graph => Génération de graphiques Apache::ParseLog => Analyse de traces Apache::ParseLog + Graph Journée du 30/11/2010 - S. Gallina - GEPV - 19/42

DBI => accès aux bases de données @row = tableau contenant les champs sélectionnés use DBI; $db = DBI->connect("dbi:mysql:DB1",'u','p') or die("$dbi::errstr"); $req = $db->prepare("select * FROM table1;"); $req->execute(); while(@row = $req->fetchrow_array()) { print join(" ", @row). "\n"; $db->disconnect(); Journée du 30/11/2010 - S. Gallina - GEPV - 20/42

Graph => Génération de graphique @labels @values janvier février mars avril 10 27 15 8 use GD::Graph; use GD::Graph::pie ; @labels = ('janvier', 'février', 'mars', 'avril'); @values = (10, 27, 15, 8); @data = (\@labels, \@values); $graph = GD::Graph::pie->new(600, 400) or die($graph->error); $image = $graph->plot(\@data) or die($graph->error); open(f1, '>pie.png') or die("cannot write to pie.png: $!"); print F1 $image->png; # image->jpg image->postcript close F1; Journée du 30/11/2010 - S. Gallina - GEPV - 21/42

Apache::ParseLog Analyse de fichier de traces %bydate : tableau associatif Clé = la date, valeur = nombre d'erreurs keys(%bydate) => liste de toutes les clés $bydate{$date : la valeur associée à la clé %bydate Clé Valeur 11/14/2010 4 11/15/2010 3 11/16/2010 5 11/17/2010 11 11/19/2010 5 11/20/2010 3 use Apache::ParseLog; $base = new Apache::ParseLog("/etc/apache2/apache2.conf"); $errorlog = $base->geterrorlog(); Parser les traces d'erreurs %bydate = $errorlog->allbydate(); for $date (sort(keys(%bydate))) { print "$date:\t$bydate{$date\n"; Comptabilise les erreurs par date Journée du 30/11/2010 - S. Gallina - GEPV - 22/42

Apache::ParseLog + Graph::Pie %bydate 11/14/2010 4 11/15/2010 3 11/16/2010 5 11/17/2010 11 11/19/2010 5 11/20/2010 3 @labels @values 11/14 11/15 11/16 11/17 11/19 11/20 4 3 5 11 5 3 for $date (keys(%bydate)) { push @labels, $date; push @values, $bydate{$date; Journée du 30/11/2010 - S. Gallina - GEPV - 23/42

Apache::ParseLog + Graph::Pie use Apache::ParseLog; $base = new Apache::ParseLog("/etc/apache2/apache2.conf"); $errorlog = $base->geterrorlog(); %bydate = $errorlog->allbydate(); for $date (keys(%bydate)) { push @labels, $date; push @values, $bydate{$date; @data = (\@labels, \@values) ; use GD::Graph; use GD::Graph::pie; $graph = GD::Graph::pie->new(600, 400) or die($graph->error); $graph->set(title => "Erreurs par date") or die($graph->error); $image = $graph->plot(\@data) or die($graph->error); open(f1, '>bydate.png') or die("cannot write to $file: $!"); print F1 $image->png ; # image->jpg image->postcript close F1; Journée du 30/11/2010 - S. Gallina - GEPV - 24/42

Retour d'expérience Projet GEPV / Maxime Pauwels Génétique et Évolution des Populations Végétales Enchainement de plusieurs logiciels Exécutions répétées d'un des logiciels avec différentes valeurs Synthèse des résultats Génération de graphiques Utilisation du cluster du CRI de l'ustl Journée du 30/11/2010 - S. Gallina - GEPV - 25/42

Enchaînement de logiciels Modèles de population Génération de données génétiques Fichiers de données Filtrage des résultats Résultats Exécutions multiples d'analyses Fichiers de résultat Calculs statistiques + génération de graphes Tableaux + graphes Journée du 30/11/2010 - S. Gallina - GEPV - 26/42

Analyses Logiciel pour partitionner une population en sous-populations selon la valeur des marqueurs génétiques des individus 1 paramètre K Nombre de sous-populations K varie de 1 à 40 Pour chaque valeur de K: 10 réplicats => 400 exécutions (pour un jeu de données) Journée du 30/11/2010 - S. Gallina - GEPV - 27/42

Execution en série des analyses Logiciel : structure $k_max = 40; $rep_max = 10; $resdir = "res"; mkdir $resdir ; for $k (1.. $k_max) { for $rep (1.. $rep_max) { $out = $resdir. "/k". $k. "_r". $rep"); $cmd = "structure -m mainparams -e extraparams ". "-i data -o $out -K $k"; system($cmd); Exemple de nom de fichier résultat res/k6_r4 1 exécution du logiciel Journée du 30/11/2010 - S. Gallina - GEPV - 28/42

Reprise sur erreur $k_max = 40; $rep_max = 15; $resdir = "res"; mkdir $resdir unless (-d $resdir); Si le dossier existe déjà for $k (1.. $k_max) { Si le fichier de résultat existe déjà for $rep (1.. $rep_max) { $out = $resdir. "/k". $k. "_r". $rep"); next if (-f $out. "_f"); $cmd = "structure -m mainparams -e extraparams ". "-i data -o $out -K $k"; system($cmd); Journée du 30/11/2010 - S. Gallina - GEPV - 29/42

Execution en parallèle sur le cluster du CRI Lille1 Cluster : système de soumission de job PBS : commande qsub Contraintes de PBS : Mettre la ligne de commande à exécuter dans un fichier texte (qui sera transmis à qsub) création de 400 fichiers de commande Dans la ligne de commande : utiliser uniquement des chemins complets pour les noms de fichier /home/gallina/bin/mon_programme /home/gallina/projet1/res/k01_r01 Ne rien envoyer sur la sortie standard et la sortie d'erreurs Journée du 30/11/2010 - S. Gallina - GEPV - 30/42

Création du fichier de commandes Soumission du fichier de commandes Exécution sur le cluster du CRI Lille1 $home = $ENV{"HOME" ; chomp ($here = `pwd`); $k_max = 40 ; $rep_max = 10 ; $resdir = "$here/res"; mkdir $resdir unless (-d $resdir); for $k (1.. $k_max) { for $rep (1.. $rep_max) { $out = $resdir. "/k". $k. "_r". $rep"); next if (-f $out. "_f"); $cmd = "$home/bin/structure -m $here/mainparams", " -e $here/extraparams -i $here/data", " -o $out -K $k > /dev/null 2>&1"; Chemins complets Rien sur les sorties standards # system($cmd); version sans utilisation de cluster $cmdfile = $out. ".sh"; open(fho, ">$cmdfile") or die("cannot create $cmdfile"); print FHO "$cmd\n"; close(fho); chmod 755 $cmdfile; system("qsub -l nodes=1:ppn=1:xeon $cmdfile"); Journée du 30/11/2010 - S. Gallina - GEPV - 31/42

Résultat pour K = 6 et réplicat = 4 2 0.0784-0.1022 0.1144 0.0837 0.1356 3 0.0353 0.1022-0.1169 0.0305 0.0314 4 0.1143 0.1144 0.1169-0.1067 0.1248 5 0.0053 0.0837 0.0305 0.1067-0.0584 6 0.0651 0.1356 0.0314 0.1248 0.0584 - Average distances (expected heterozygosity) between individuals in same cluster: cluster 1 : 0.6083 cluster 2 : 0.6091 cluster 3 : 0.6039 cluster 4 : 0.8608 cluster 5 : 0.6230 cluster 6 : 0.5898 -------------------------------------------- Estimated Ln Prob of Data = -22394.5 Mean value of ln likelihood = -21897.8 Variance of ln likelihood = 993.3 Mean value of alpha = 0.0348 Allele frequencies uncorrelated 856 lignes 1 seule m'intéresse Inferred ancestry of individuals: Label (%Miss) Pop: Inferred clusters 1 I12-10 (10) 12 : 0.480 0.035 0.034 0.003 0.201 0.248 2 I12-11 (0) 12 : 0.401 0.004 0.083 0.002 0.500 0.011 3 I12-12 (0) 12 : 0.805 0.006 0.013 0.002 0.167 0.006 4 I12-13 (0) 12 : 0.690 0.002 0.017 0.003 0.219 0.069 5 I12-14 (0) 12 : 0.060 0.036 0.055 0.004 0.038 0.807 6 I12-15 (0) 12 Journée : du 0.355 30/11/2010 0.024 - S. 0.125 Gallina - 0.007 GEPV - 0.124 32/42 0.366 7 I12-16 (5) 12 : 0.721 0.004 0.009 0.006 0.252 0.008

Extraction de données / expressions régulières Description (match) de la ligne $line =~ /expression régulière/ Retoune vrai si la ligne correspond à l'expression régulière Si vrai, on peut récupérer une partie de la chaîne En utilisant des () autour d'une partie de l'expression Ligne exemple : Estimated Ln Prob of Data = -22394.5 Début de ligne Exactement ces mots N'importe quel nombre de blancs Le caractère = Fin de ligne if ($line =~ /^Estimated Ln Prob of Data\s*=(.*)$/) { $res = $1; Tout ce qui reste jusqu'à la fin de la ligne => récupéré dans $1 Journée du 30/11/2010 - S. Gallina - GEPV - 33/42

Collecte des 400 résultats / tableau associatif Placer la valeur dans un tableau associatif "à 2 dimensions" : K et rep $max_k = 40; $max_rep = 10; for $k (1.. $max_k) { for $rep (1.. $max_rep) { $file = $out = $resdir. "/k". $k. "_r". $rep") ; open(fh, $file) or die("cannot open $file:$!"); while($line = <FH>) { if ($line =~ /^Estimated Ln Prob of Data\s*=(.*)$/){ $res{$k, $rep = $1; last; close(fh); Journée du 30/11/2010 - S. Gallina - GEPV - 34/42

Formatage en tableau excel use Spreadsheet::WriteExcel; Créer un doc excel $xls = Spreadsheet::WriteExcel->new("res.xls"); $sheet = $xls->add_worksheet("resultats"); # 1ere ligne de titre Créer une feuille $row = 0; $col = 1; for $k (1.. $k_max) { $sheet->write($row, $col, "k $k"); $col++; $row++; $col = 0; Titres des colonnes # lignes de valeurs Titres des lignes for $rep (1.. $rep_max) { $sheet->write($row, $col, "rep $rep"); $col++; for $k (1.. $k_max) { $sheet->write($row, $col, $res{$k, $rep); $col++; $row++; $col = 0; Cellules avec les résultats k 1 k 2 rep 1-24747,2-23053 rep 2-24747,5-23051,9 rep 3-24747,6-23052,8 rep 4-24747,5-23052,3 rep 5-24747,7-23049,5 rep 6-24747,1-23051,2 rep 7-24747,6-23052,9 rep 8-24747,4-23051,8 rep 9-24748 -23052,3 rep 10-24747,7-23053,3 Journée du 30/11/2010 - S. Gallina - GEPV - 35/42

Gestion des noms de variables Pas besoin de déclarer les variables Une variable est créée lors de sa 1ère utilisation Pratique pour faire de petits scripts Source d'erreurs pour de + gros développements Fautes de frappe list / liste / lists, k_max / max_k Directive pour forcer la déclaration des variables use strict; Journée du 30/11/2010 - S. Gallina - GEPV - 36/42

Déclaration de variables use strict; sub fonction1 { my ($k_max, $rep_max, $resdir, $k, $rep, $out, $cmd); $k_max = 40 ; $rep_max = 10; $resdir = "res"; for $k (1.. $max_k) { for $rep (1.. $rep_max) { $out = $resdir. "/k". $k. "_r". $rep"); $cmd = "structure -m mainparams -e extraparams ". "-i data -o $out -K $k"; system($cmd); Global symbol "$max_k" requires explicit package name at./prog1.pl line 6. Execution of./prog1.pl aborted due to compilation errors. Journée du 30/11/2010 - S. Gallina - GEPV - 37/42

Conclusion 1/3 Ce qui rend perplexe au départ: les symboles Les noms de variables $ @ % Les variables "caractères" @_, $_, $! Les expressions régulières /^\s*$/ :-\ Journée du 30/11/2010 - S. Gallina - GEPV - 38/42

Conclusion 2/3 Ce qui facilite la vie de programmeur Gestion de mémoire automatique Tableau associatif L'utilisation de tableau sans indices Les expressions régulières Les packages :-) Journée du 30/11/2010 - S. Gallina - GEPV - 39/42

Conclusion 3/3 Tâches pour lesquelles perl est adapté Traitement de fichiers textes Extraction de données, conversion de format, filtrage Automatisation de traitements Enchainement de programmes, exécution multiple Génération de synthèses de données Tableaux, graphiques Tâches pour lesquelles il existe un package Accès aux bases de données, web Domaines spécifiques : ex biologie BioPerl Journée du 30/11/2010 - S. Gallina - GEPV - 40/42

Publicité! Formation 18-20 janvier 2010 Introduction à la programmation Perl pour manipuler simplement vos données Public : personnes qui doivent traiter de grandes quantités de données (biologistes, chimistes etc...) Intervenants : Stefan Gaget & Sophie Gallina Date limite d'inscription : 10 décembre 2010 Journée du 30/11/2010 - S. Gallina - GEPV - 41/42

Questions? Journée du 30/11/2010 - S. Gallina - GEPV - 42/42