Cours Perl
Fonctions
Définir une fonction
Syntaxe
sub nomfonction{
instructions ;
}
Appel : &nomfonction;
sub maprocedure{
print "un essai de fonction\n";
}
&maprocedure;
Valeur retournée :
- aucune : par défaut retourne la valeur de la dernière instruction ;
- celle donnée par return.
#!/usr/bin/perl
sub fonction1{
$x = 3*5;
$y = 2+1;
}
sub fonction2{
return 3*7;
}
print &fonction1."\n";
print &fonction2."\n";
___
3
21
___
Arguments
La liste de variables suivant l'appel de la fonction représente
les arguments de la fonction. C'est le tableau spécial @_
qui les stocke, on peut y accéder en écrivant : $_[n]
.
#!/usr/bin/perl
sub maxi{
if($_[0] < $_[1]){
return $_[1]
}
else{
return $_[0]
}
}
print "donnez un nombre : "; $x = <STDIN>;
print "donnez un nombre : "; $y = <STDIN>;
print "le maximum est ".&maxi($x, $y)."\n";
_______________________
donnez un nombre : 123
donnez un nombre : 345
le maximum est 345
______________________
Variables globales et locales
Dans une fonction les variables déclarées sont globales. Pour
indiquer qu'elles sont locales il faut utiliser local
avant perl version 5 et my
en perl 5.
#!/usr/bin/perl
sub essai{
my $x = 6;
$y = 8;
}
$x = 5;
$y = 7;
&essai;
print "x = $x ; y = $y";
_____________
x = 5 ; y = 8
_____________
Fonctions prédéfinies
NB : les parenthèses ne sont pas obligatoires :
#!/usr/bin/perl
$x = sqrt 225;
$y = sqrt(144);
print "$x $y";
_____
15 12
_____
Mathématiques
nom | description |
abs(x) | valeur absolue |
cos(x) | cosinus |
exp(x) | exponentielle |
int(x) | partie entière |
log(x) | logarithme |
sin(x) | sinus |
sqrt(x) | racine carrée de x |
rand | entier pseudo-aléatoire |
srand | nouvelle séquence de nombres pseudo-aléatoires |
atan2(x, y) | arc tangente de y/x |
Chaînes de caractères
nom | description |
chop(chaine) | suppression du dernier caractère |
chomp(chaine) | suppression du retour chariot |
index(chaine, sschaine) | indice de la première occurrence de chaine dans sschaine |
length(chaine) | taille de la chaine |
lc(chaine) | retourne la chaine en minuscules (perl 5) |
lcfirst(chaine) | retourne la chaine avec le premier caractère en minuscule |
split(sep,chaine) | sépare la chaine en éléments en fonction du séparateur |
substr(chaine, début, longueur) | extraction d'une sous-chaine |
uc(chaine) | retourne la chaine en majuscules (perl 5) |
ucfirst(chaine) | met le premier caractère de la chaine en majuscule |
chr(code) | retourne le caractère qui correspond au code ascii |
Tableaux
grep(exp,tab) | recherche l'expression dans un tableau, retourne liste correspondances |
join(sep, tab) | regroupe les éléments de tab dans une chaine en insérant le séparateur |
pop(tab) | retourne le dernier élément et le supprime |
push(tab,elt) | insère des éléments en fin de tableau |
reverse(tab) | inverse l'ordre des éléments |
shift(tab) | retourner et supprimer le premier élément |
sort(tab) | trie par ordre croissant les éléments. |
splice(tab, deb, n) | enlève n éléments de tab en commençant à deb, retourne les éléments supprimés |
unshift(tab, elt) | insère des éléments en début de tableau |
@sport = ('ski', 'natation', 'randonnée'); print " @sport";
shift(@sport); print "\n @sport";
unshift(@sport, 'tennis'); print "\n @sport";
@sport = sort(@sport); print "\n @sport";
@sport = reverse(@sport); print "\n @sport";
pop(@sport); print "\n @sport";
push(@sport,'pelote-basque');
push(@sport,'ping-pong'); print "\n @sport";
@supprime = splice(@sport, 2, 2);
print "\n @sport";
print "\n @supprime \n"
_________________________________________
ski natation randonnée
natation randonnée
tennis natation randonnée
natation randonnée tennis
tennis randonnée natation
tennis randonnée
tennis randonnée pelote-basque ping-pong
tennis randonnée
pelote-basque ping-pong
__________________________________________
Tableaux indicés
keys(tab) | liste des clés |
values(tab) | liste des valeurs |
each(tab) | parcourt la liste et donne clé-valeur |
delete | supprime une clé-valeur de la liste |
exists | pour savoir si un élément a été défini |
#!/usr/bin/perl
%prix = ('poulets'=>34, 'moules'=>25, 'pizzas'=>20);
@listecle = keys %prix;
print "\n@listecle";
@listevaleurs = values %prix;
print "\n@listevaleurs";
______________________
pizzas poulets moules
20 34 25
______________________
Il est possible d'enchaîner les fonctions, chaque fonction prenant pour paramètre le résultat de la fonction précédemment exécutée (l'ordre d'exécution est de droite à gauche) :
#!/usr/bin/perl
%prix = ('poulets'=>34, 'moules'=>25, 'pizzas'=>20);
print join ' ', reverse sort keys %prix;
______________________
poulets pizzas moules
______________________
Date et heure
time | retourne le nombre de secondes depuis le 1/01/1970 |
gmtime | retourne heure Greenwich |
localtime | retourne heure locale |
#!/usr/bin/perl
$dategm = gmtime;
$datelocal = localtime;
print "GMT : $dategm\n";
print "Local : $datelocal\n";
($sec, $min, $h, $j, $m, $a, $sj, $aj, $isdst) = localtime time;
$mois = (qw(janvier février mars avril mail juin
juillet aošt septembre octobre novembre décembre))[$m];
$jour = (qw(dimanche lundi mardi mercredi jeudi vendredi samedi))[$sj];
$annee = $a + 1900;
print "$jour $j $mois $annee\n";
print "$h h $min mn $sec s\n";
________________________________
GMT : Tue Jan 23 15:06:19 2001
Local : Tue Jan 23 10:06:19 2001
mardi 23 janvier 2001
10 h 6 mn 19 s
_________________________________
Fonctions système
nom | description |
die | interruption du script et affichage d'un message |
exec | exécution d'un programme |
exit | interruption du script |
getlogin | donne le nom du login |
sleep | suspend l'exécution pendant une durée |
system | exécution d'un programme externe, le script est
suspendu |