TP8-IUP1 Les scripts Perl Practical Extraction and Report Language
Transcription
TP8-IUP1 Les scripts Perl Practical Extraction and Report Language
TP8-IUP1 Les scripts Perl Practical Extraction and Report Language January 12, 2009 Les opérateurs déférentiels principaux : • $ : l’opérateur déférentiel des scalaires. 1 Les variables, et les opérateur déférentiels • @ : l’opérateur déférentiel des tableaux. • % : l’opérateur déférentiel des tableaux avec corepondance ( hash table ). • ∗ : les typeglob. En perl, les variables sont typés à l’aide des opérateurs déférentiels. Le nom d’une variable peut être constitué de n’importe quel type de caractère, cependant on doit indiquer son type à l’aide d’un des opérateurs déférentiels. 1.1 Les variables de type scalaire Les variables de type scalaire, sont des variables qui sont constituées d’une seule donnée. Une donnée peut être un entier, un réel, une chaı̂ne de caractère ... Les opérateurs sur ces données sont les mêmes que ceux utilisés en langage C. Cependant il ne faudra jamais oublier d’indiquer à l’aide d’un opérateur déférentiel le type de la variable. Exemple Perl ne propose pas d’interpréteur de commande. On vous donne cependant, ci-après, un petit script perl qui permet d’émuler un interpréteur de commandes perl. Nous n’expliquerons le fonctionnement de ce programme, cependant il permet de comprendre rapidement la syntaxe de base du langage perl. La suite d’instruction ci-dessous a été réalisée avec cet interpréteur. 1 print $a $a=1 1 $b=$a $a=aaaa print $b print $a 1 aaaa $c=$a+$b $a++ print $c print $a 2 aaab $a="Hello World" $c="Salut Monde" print $a $c.=$a Hello World print $c $a++ Salut Mondeaaab Notons que pour évaluer une expressions, perl se sert du context. Pour additionner deux entiers, on utilise l’opérateur ‘‘+’’, pour concaténer deux chaı̂nes de caractères on utilise l’opérateur ’’.’’ ... ➥Exercice 1.1 Ecrivez le script perl suivant, et testez l’exemple indiqué précédement. #!/usr/bin/perl my $count = 0 ; # $count compte le nombre d’occurrence d’accolades ou d my $statement = "" ; # statement supporte les instructions multilignes local $SIG{__WARN__} = sub {} ;# suppression des repports d’erreurs recupera while (<>) { # accepter l’entrée du clavier chomp; # efface le caract\‘ere ‘‘\n’’ while (/{|\(|\[/g) { $count++ } ;# attendre une paranthèse ou une acco while (/}|\)|\]/g) { $count-- } ;# Paires avec ), ], } $statement .= $_ . " " ; # ajouter l’entrée à l’instruction actuelle. On con if (!$count) { #Evaluer que si les paires sont complètes. eval $statement ; if ($@) { print "Syntax error.\n" } ; # Notifier l’erreur. $statement = "" ; # Effacer l’instruction actuelle. $count = 0 ; # remettre le compteur a zero } } 1.2 Les variables de type tableau, et les listes Les variables de type tableau utilisent l’opérateur déférentiel @ . Un tableau est une suite de variables scalaires. Les tableaux se traitent comme en C. Comme pour les variables scalaires il faut toujours indiquer l’opérateur déférentiel. L’opérateur # permet de connaı̂tre le dernier indice du tableau. Ainsi la taille d’un tableau 2 nommé tab, peut être obtenue avec l’expression $#tab + 1 (les tableaux sont indicés de 0 à n-1). Exemple @tab=("petit", "grand","moyen"); print @tab[1]; grand print $#tab 2 print @tab petitgrandmoyen $c=join " ", @tab print $c petit grand moyen @tab2=split " ", $c print @tab2 petitgrandmoyen ➥Exercice 1.2 Donnez la signification des fonctions split et join. Les principales structures de contrôle • if (COND) { } • if (COND) { } else { } 2 Les structures contrôle de • if (COND) { } elsif (COND) { } else { } • while (COND) { } • for (;;;) { } • foreach VAR (LIST) { } Les structures de contrôle de perl, ressemblent beaucoup à celle de C ou java, excepté la structure de contrôle foreach, dont nous donnons un exemple dans la section suivante. Pour les comparaisons entre des variables scalaires de type entier ou réels , on utilise les opérateurs classiques de comparaison du C : ==, != .... Pour les comparaisons entre des chaı̂nes de caractères on utilise les mêmes commandes que celle utilisées par la commande test du shell sur les entiers ( eq et ne). 3 3 Shell bash vs Script Perl On donne ci-dessous des exemples de scripts basics, en shell et l’equivalent en script perl. Les premiers scripts permettent de récupérer les arguments passés à la commande, et de les afficher : Script perl : Script Bourn Shell : #!/bin/sh #!/usr/bin/perl # Traitement des arguments en bash. # Fonctionnement des arguments de # Les arguments de la commande sont # la commande en perl. Les arguments # notés $1, $2, $3 ... le nombre # sont dans le tableau ARGV. # d’argument $#, et la liste $*. print "Le nombre d’argument est " . ($#ARGV+1) . foreach $elem (@ARGV) { print "$elem \n"; } echo "Le nombre d’argument est $#" for elem in $* do echo $elem done Dans les scripts perl, l’évaluation des expressions entre quotes, backquotes, et guillemets se fait de la même manière que l’évaluation en bourne shell. Les deux scripts suivants sont équivalents, au niveau des mécanismes utilisés pour leur interprétation : Script perl : Script bourn shell : #!/usr/bin/perl #!/bin/sh for elem in ‘ls‘ foreach $elem (‘ls‘) do { echo ‘ls -l $elem‘ print ‘ls -l $elem‘ ; done } On peut comme en shell exécuter une commande du système sans recouvrir le processus courant à l’aide de la commande system, mais on ne peut changer les variables d’environnement comme le répertoire courant. Script perl Script Bourne shell 4 #!/bin/sh #!/usr/bin/perl # Execution d’une boucle foreach seconde version for elem in ‘ls‘ do ls -l $elem done for $elem (‘ls‘) { system "ls -l $elem" ; } Exercice Réécrivez tout les sript écrits aux précd́ent TP en bourne shell, en script perl. 4 " \