le langage perl - freemariepascal.delamare.free.fr/img/pdf/perlppt.pdf · les variables et tableaux...

22
Le langage Perl Marie-pascale Delamare toujours depuis la même URL

Upload: others

Post on 22-Feb-2020

1 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Le langage Perl - Freemariepascal.delamare.free.fr/IMG/pdf/Perlppt.pdf · Les variables et tableaux spéciaux $_ La dernière ligne lue (au sein d’une boucle « while ») La dernière

Le langage Perl

Marie-pascale Delamare toujours depuis la même URL

Page 2: Le langage Perl - Freemariepascal.delamare.free.fr/IMG/pdf/Perlppt.pdf · Les variables et tableaux spéciaux $_ La dernière ligne lue (au sein d’une boucle « while ») La dernière

Présentation

#!/bin/perl

print "Bonjour";

Chaque instruction Perl se termine par un point-virgule. La ligne # !/bin/perl indique où se situe l’interpréteur perl.

Marie-pascale Delamare toujours depuis la même URL

Page 3: Le langage Perl - Freemariepascal.delamare.free.fr/IMG/pdf/Perlppt.pdf · Les variables et tableaux spéciaux $_ La dernière ligne lue (au sein d’une boucle « while ») La dernière

Déclarer ses variables ou scalaires

Les scalaires sont précédés du caractère $

my $i = 0; my $c = 'a';

my $mon_fruit_prefere = 'kiwi';

my $racine_carree_de_2 = 1.41421;

my $chaine = '100 grammes de mon_fruit_prefere'; => '100 grammes de $mon_fruit_prefere'

my $chaine = "100 grammes de mon_fruit_prefere"; => '100 grammes de kiwi'

Marie-pascale Delamare toujours depuis la même URL

Page 4: Le langage Perl - Freemariepascal.delamare.free.fr/IMG/pdf/Perlppt.pdf · Les variables et tableaux spéciaux $_ La dernière ligne lue (au sein d’une boucle « while ») La dernière

Déclarer et utiliser ses tableaux

Toujours précédés du caractère « @ »

my @chiffres = (1,2,3,4,5,6,7,8,9,0);

my @alphabet = ('a'..'z'); Les deux points

signifient de "tant à tant"

my @cartes = ('01'..'10','Valet','Dame','Roi');

on fait référence à un élément du tableau selon son indice par :

$chiffres[1] ; (=> 2)

$alphabet[0] ; (=> 'a') Marie-pascale Delamare toujours depuis la même URL

Page 5: Le langage Perl - Freemariepascal.delamare.free.fr/IMG/pdf/Perlppt.pdf · Les variables et tableaux spéciaux $_ La dernière ligne lue (au sein d’une boucle « while ») La dernière

Les opérateurs

$a = 1; $b = $a ;

$c = 53 + 5 - 2*4 ;

Plusieurs notations pour incrémenter une

variable

$a = $a + 1; ou $a += 1; $a++;

$c = 'ce' . 'rise'; (=> $c devient 'cerise')

$x = 2 * (56 - 78);

Marie-pascale Delamare toujours depuis la même URL

Page 6: Le langage Perl - Freemariepascal.delamare.free.fr/IMG/pdf/Perlppt.pdf · Les variables et tableaux spéciaux $_ La dernière ligne lue (au sein d’une boucle « while ») La dernière

Les comparaisons

de chiffres

>, >=, <, <=, ==, !=

Attention : = est une affectation, == est une comparaison if ($a = 2) => sera toujours vrai !

de chaînes

gt, ge, lt, le, eq, ne

Attention : Ne pas confondre la comparaison de chaînes et d'entiers 'b' == 'a' => évalué comme étant vrai ! Il faut écrire : 'b' eq 'a' => évalué faux bien sûr.

Marie-pascale Delamare toujours depuis la même URL

Page 7: Le langage Perl - Freemariepascal.delamare.free.fr/IMG/pdf/Perlppt.pdf · Les variables et tableaux spéciaux $_ La dernière ligne lue (au sein d’une boucle « while ») La dernière

Syntaxe générale

my $a = 'a'

print $a;

Ce programme est erroné !

my $a = 'Une très longue chaîne de caractère qui ne peut s'écrire sur une seule ligne';

Ok !

Les commentaires commencent par un #.

# voici un commentaire

my $a = 3; # Et en voici un autre

Marie-pascale Delamare toujours depuis la même URL

Page 8: Le langage Perl - Freemariepascal.delamare.free.fr/IMG/pdf/Perlppt.pdf · Les variables et tableaux spéciaux $_ La dernière ligne lue (au sein d’une boucle « while ») La dernière

Les structures

L’alternative ;

if

Les boucles ;

for, while, foreach.

Marie-pascale Delamare toujours depuis la même URL

Page 9: Le langage Perl - Freemariepascal.delamare.free.fr/IMG/pdf/Perlppt.pdf · Les variables et tableaux spéciaux $_ La dernière ligne lue (au sein d’une boucle « while ») La dernière

L’alternative

if (expression) {

bloc;

}

if ($prix[1] > 20) {

print 'Les dattes sont un peu chères...';

print 'Achetons plutôt des cerises';

}

Marie-pascale Delamare toujours depuis la même URL

Page 10: Le langage Perl - Freemariepascal.delamare.free.fr/IMG/pdf/Perlppt.pdf · Les variables et tableaux spéciaux $_ La dernière ligne lue (au sein d’une boucle « while ») La dernière

L’alternative

if (expression) {

bloc;

} else {

bloc2;

}

if ($fruit eq 'fraise') {

print 'parfait !';

} else {

print 'Bof !';

print 'Je préfère sans pépin';

} Marie-pascale Delamare

toujours depuis la même URL

Page 11: Le langage Perl - Freemariepascal.delamare.free.fr/IMG/pdf/Perlppt.pdf · Les variables et tableaux spéciaux $_ La dernière ligne lue (au sein d’une boucle « while ») La dernière

L’alternative

Le traitement d'une réponse de type (Oui/Non) :

en fait, on teste que la réponse commence par

"O"

print 'Etes-vous d\'accord ? ';

my $reponse = <STDIN>;

if ($reponse =~ /^O/i) { # commence par O

(minus. ou majus.)

print "Alors on continue";

} Marie-pascale Delamare

toujours depuis la même URL

Page 12: Le langage Perl - Freemariepascal.delamare.free.fr/IMG/pdf/Perlppt.pdf · Les variables et tableaux spéciaux $_ La dernière ligne lue (au sein d’une boucle « while ») La dernière

Les boucles

for (init;condition;cmd) {

bloc;

}

for (my $i=0; $i <= $#fruit; $i++) {

print $fruit[$i];

}

Marie-pascale Delamare toujours depuis la même URL

Page 13: Le langage Perl - Freemariepascal.delamare.free.fr/IMG/pdf/Perlppt.pdf · Les variables et tableaux spéciaux $_ La dernière ligne lue (au sein d’une boucle « while ») La dernière

Les boucles

while (expression) {

bloc;

}

my $mon_argent = $porte_monnaie;

while ($mon_argent > $prix[2]) {

$mon_argent -= $prix[2];

# ou $mon_argent = $mon_argent - $prix[2]

print "Et un kilo de cerises !";

}

Marie-pascale Delamare toujours depuis la même URL

Page 14: Le langage Perl - Freemariepascal.delamare.free.fr/IMG/pdf/Perlppt.pdf · Les variables et tableaux spéciaux $_ La dernière ligne lue (au sein d’une boucle « while ») La dernière

Les boucles

foreach élément (tableau) {

bloc;

}

foreach my $f (@fruits) {

print $f;

}

Marie-pascale Delamare toujours depuis la même URL

Page 15: Le langage Perl - Freemariepascal.delamare.free.fr/IMG/pdf/Perlppt.pdf · Les variables et tableaux spéciaux $_ La dernière ligne lue (au sein d’une boucle « while ») La dernière

Quelques fonctions intéressantes

print : permet d'afficher un message, ou le contenu de variables.

print 'J\'ai acheté ', $nombre,' kilos de ', $fruit;

exit : permet d'arrêter le programme en cours

if ($erreur) {exit;}

die : permet d'arrêter le programme en cours en affichant un message d'erreur.

if ($fruit eq 'orange') {die 'Je déteste les oranges !'}

system : permet de lancer une commande système

system 'mkdir mon_repertoire';

Marie-pascale Delamare toujours depuis la même URL

Page 16: Le langage Perl - Freemariepascal.delamare.free.fr/IMG/pdf/Perlppt.pdf · Les variables et tableaux spéciaux $_ La dernière ligne lue (au sein d’une boucle « while ») La dernière

Quelques fonctions intéressantes

Sur les chaînes de caractères

split('motif', ch) Sépare la chaîne en plusieurs éléments (le séparateur étant motif).

Le résultat est un tableau. (Fonction très utilisée pour l’analyse de fichiers)

@t = split(' / ', 'amande / fraise / cerise');=> ('amande','fraise', 'cerise')

Sur les tableaux

grep(/expression/, tableau) Recherche d'une expression dans un

tableau

if (grep(/poivron/, @fruits)); => faux

if (grep(/$f/, @fruits) {print 'fruit connu';}

grep retourne un tableau des éléments trouvés :

@f = grep(/ise$/, @fruits); => fraise;cerise Marie-pascale Delamare toujours depuis la même URL

Page 17: Le langage Perl - Freemariepascal.delamare.free.fr/IMG/pdf/Perlppt.pdf · Les variables et tableaux spéciaux $_ La dernière ligne lue (au sein d’une boucle « while ») La dernière

La gestion des fichiers

open (F, « < $fichier ») || die "Problème

pour ouvrir $fichier: $!";

while (my $ligne = <F>) {

print $ligne;

}

close F;

Marie-pascale Delamare toujours depuis la même URL

Page 18: Le langage Perl - Freemariepascal.delamare.free.fr/IMG/pdf/Perlppt.pdf · Les variables et tableaux spéciaux $_ La dernière ligne lue (au sein d’une boucle « while ») La dernière

La gestion des fichiers : quelques particularités

$reponse = <STDIN>; => lecture d'une ligne à l'écran

@lignes = <FENT>; => lecture de tout le fichier dans un tableau

print STDOUT "Bonjour\n"; => sortie standard (l’écran)

print STDERR 'Je déteste les oranges !'; => sortie standard pour les erreurs (l’écran)

Marie-pascale Delamare toujours depuis la même URL

Page 19: Le langage Perl - Freemariepascal.delamare.free.fr/IMG/pdf/Perlppt.pdf · Les variables et tableaux spéciaux $_ La dernière ligne lue (au sein d’une boucle « while ») La dernière

Les variables et tableaux spéciaux

$_ La dernière ligne lue (au sein d’une boucle « while »)

$! La dernière erreur, utilisée dans les détections

d’erreurs

$$ Le numéro système du programme en cours: parfois

utile car il change à chaque fois

$0 Le nom du programme (à utiliser, cela vous évitera

de modifier le programme s’il change de nom)

@ARGV tableau qui contient les paramètres passés au

programme

%ENV tableau indicé contenant toutes les variables

d'environnement

Marie-pascale Delamare

toujours depuis la même URL

Page 20: Le langage Perl - Freemariepascal.delamare.free.fr/IMG/pdf/Perlppt.pdf · Les variables et tableaux spéciaux $_ La dernière ligne lue (au sein d’une boucle « while ») La dernière

Passer des paramètres au programme

#!/bin/perl

use strict;

my $email = $ARGV[0];

open (MAIL, "| mail -s 'Bonjour' $email") || die "Problème : $!";

print MAIL "Bonjour très cher\n";

print MAIL "Nous sommes très heureux de vous envoyer un mail\n"

print MAIL " A bientôt\n"

close MAIL;

Appel : nomDuScript.pl [email protected]

Marie-pascale Delamare toujours depuis la même URL

Page 21: Le langage Perl - Freemariepascal.delamare.free.fr/IMG/pdf/Perlppt.pdf · Les variables et tableaux spéciaux $_ La dernière ligne lue (au sein d’une boucle « while ») La dernière

Accès aux bases de données

#!/bin/perl

use strict;

use DBI; # On va utiliser la base de données

my $dbh = DBI->connect('dbi:Oracle:cours', 'scott','tiger');

# Préparation d'une requête de sélection des valeurs

my $sel = $dbh->prepare('select * from mpatient');

$sel->execute || die "Pb à la sélection : $DBI::errstr";

print "Voici la liste des patients enregistrés";

while (my ($nopatient, $nom, $prenom) = $sel->fetchrow_array) {

# Pour chaque ligne lue...

print "Patient no $nopatient : $nom, $prenom\n";

}

$sel->finish; # On ferme la requête insert

$dbh->disconnect; # Déconnexion de la BDD

Marie-pascale Delamare

toujours depuis la même URL

Page 22: Le langage Perl - Freemariepascal.delamare.free.fr/IMG/pdf/Perlppt.pdf · Les variables et tableaux spéciaux $_ La dernière ligne lue (au sein d’une boucle « while ») La dernière

Accès aux bases de données

Ne pas oublier le use DBI

Gérer sa connexion à la base de données

Préparer sa requête

Exécuter sa requête

Exploiter le résultat

Terminer le traitement de la requête

Se déconnecter de la base de données

Marie-pascale Delamare toujours depuis la même URL