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
" \