 Langage interprété manipuler des chaînes de caractères manipuler des fichiers textes Créer des script CGI Sensible à...
#!/usr/local/bin/perl#sous unixprint("Hello World!");#!c:perlperl.exe#sous windowsprint("Hello World!");#!/usr/local/bin/p...
 Scalaires : $ Listes (tableaux) : @ Tableaux associatifs : %(appelés hashages ou hashes)Nom de variable correct Nom de...
Instruction Type de lavariable$Variable = 0; type entier$Variable = 12; type entier$Variable = 0.0; type réel$Variable = 1...
Opérateur Dénomination Effet ExempleRésultat (avec $xvalant 7)+ opérateur daddition Ajoute deux valeurs $x+3 10-opérateur ...
Opérateur Dénomination Effet Exemple Résultat. opérateur deconcaténationMet deux chaînes bout àbout$x." chaine"Ajoute la c...
$x = $a cmp $b; +1, 0 ou -1$a = lc ("ABCD"); $a = "abcd “$a = lcfirst ("ABCD"); $a = "aBCD“$a = uc ("abcd"); $a = "ABCD“$a...
#!/usr/bin/perlprint "Des listes et des boucles !n";#Un tableau bien hétérogène !@tablo = (1, 2, 3, "foo", 4, "bar");#Et u...
@liste = (100,101,102,103,104);@x = chop(@liste);print ("liste : @listen");print ("x : @xn");print ("le plus grand indice:...
print "Quelques URLs intéressantesn";#Les clés à gauche de la grosse flèche, les valeurs à droite de la grosse flèche%urls...
@cles = keys(%hash);récupérer dans la liste en question lensemble des clés daccés à un hash$taille = keys(%hash);le nombre...
 Le fonctionnement de lopérateur sort() est le suivant : Il vaconsidérer tous les couples de valeurs quil peut fabriquera...
#!/usr/local/bin/perl$Compteur=10;$compteur++; # erreur de frappeprint ($Compteur = ,"$Compteur n");# La valeur affichée e...
if expression) {instruction-vraie_1;instruction-vraie_2;} else {instruction-fausse_1;instruction-fausse_2;}unless (express...
while (expression) {instruction_1;instruction_2;instruction_3;}until (expression) {instruction_1;instruction_2;instruction...
$i = 100;print "Avant la boucle, i = $in";@a = (1,2,3,4,5);foreach $i (@a) {print "Pendant la boucle, i = $in";}print "Apr...
#definitionsub Nom_de_la_fonction {Instruction_1;Instruction_2;. . . . .Instruction_n;}#appel&Nom_de_la_fonction;do Nom_de...
open(INFILE, "input.txt") or die "Impossible douvrir input.txt enlecture : $!";open(OUTFILE, ">output.txt") or die "Imposs...
my $ligne = <INFILE>;my @lignes = <INFILE>;while ( my $ligne = <FICHIER> ){#faire quelque choseprint $ligne;}print STDERR ...
#ouvertureopendir (ETC,"/etc") or die "Impossible douvrir /etc";#fermetureclosedir (ETC);#lire le contenue@fichiers= readd...
opendir (ETC,"/etc")or die "Impossible douvrir /etc";while ($nom = readdir (ETC)) {print ("Le fichier $nom est present dan...
 La variable par défaut $_ La liste par défaut @_ Le tableau des arguments @ARGV renseignements sur le système %ENV L...
cest lobjet implicite sur lequel sappliquent certainesfonctions ou opérations quand aucune variable nestmentionnée.$_ est ...
sub inverse{if ($_[0] == 0){print "Division par 0 impossible !n";}else {$resultat = 1/$_[0];return $resultat;}}sub log {my...
@ARGV = ("e1.txt","e2.txt");while (<>) {Print;}
 Une expression régulière est constituée dunmodèle (un gabarit) que lon va tenterdassortir à une chaineif ("Hello World" ...
#!/usr/bin/perl;@ARGV = ("Entree.txt");$mot=<STDIN>;while (<>) {if (/$mot/) {print;}}"Hello World" =~ m!World!; #correspon...
"2+2=4" =~ /2+2/;# pas de correspondance, + est un meta-caractère"2+2=4" =~ /2+2/;# correspond, + est traité comme un + or...
"housekeeper" =~ /keeper/; # correspond"housekeeper" =~ /^keeper/; # ne correspond pas"housekeeper" =~ /keeper$/; # corres...
* facteur multiplicatif 0 à n.+ représentant le facteur multiplicatif de 1 à n.? représentant le facteur multiplicatif par...
/cat/; # reconnaît cat/[bcr]at/; # reconnaît bat, cat, ou rat‘/item[0123456789]/; # reconnaît item0 ou ... ou item9‘"abc" ...
d est un chiffre et représente [0-9]s est un caractère despacement et représente [ trnf]w est un caractère de mot (alphanu...
 d est un chiffre et représente [0-9] s est un caractère despacement et représente [ trnf] w est un caractère de mot (a...
Les parenthèses permettent de mémoriser une chaine de caractèresqui pourra, de cette manière, être référencée ultérieureme...
dans un contexte scalaire, $time =~ /(dd):(dd):(dd)/ retourne unevaleur vraie ou fausse. Dans un contexte de liste, en rev...
 Possibilité de mémoriser des élémentsréférencées 1, 2, ..., n dans le corps delexpression et $1, $2, ..., $n dans le cor...
$x = "Time to feed the cat!";$x =~ s/cat/hacker/; # $x contient "Time to feed the hacker!“$y = "quoted words";$y =~ s/^(.*...
 g Pour general. Change toutes les occurences de la formesélectionnée i Pour ignore case. Ignore le fait que la forme sé...
Perl : Practical Extraction and Report Language
Prochain SlideShare
Chargement dans…5
×

Perl : Practical Extraction and Report Language

1 055 vues

Publié le

0 commentaire
0 j’aime
Statistiques
Remarques
  • Soyez le premier à commenter

  • Soyez le premier à aimer ceci

Aucun téléchargement
Vues
Nombre de vues
1 055
Sur SlideShare
0
Issues des intégrations
0
Intégrations
4
Actions
Partages
0
Téléchargements
19
Commentaires
0
J’aime
0
Intégrations 0
Aucune incorporation

Aucune remarque pour cette diapositive

Perl : Practical Extraction and Report Language

  1. 1.  Langage interprété manipuler des chaînes de caractères manipuler des fichiers textes Créer des script CGI Sensible à la casse Fichier.pl
  2. 2. #!/usr/local/bin/perl#sous unixprint("Hello World!");#!c:perlperl.exe#sous windowsprint("Hello World!");#!/usr/local/bin/perl#script CGIprint("content-type : text/htmlnn");print("Hello World!");
  3. 3.  Scalaires : $ Listes (tableaux) : @ Tableaux associatifs : %(appelés hashages ou hashes)Nom de variable correct Nom de variable incorrect Raison$Variable $Nom de Variable comporte des espaces$Nom_De_Variable $123Nom_De_Variable commence par un chiffre$nom_de_variable $toto@mailcity.com caractère spécial @$nom_de_variable_123 $Nom-de-variable signe - interdit
  4. 4. Instruction Type de lavariable$Variable = 0; type entier$Variable = 12; type entier$Variable = 0.0; type réel$Variable = 12.0; type réel$Variable = 012; type octal$Variable = 0x6A; type hexadécimal$Variable = "0.0"; type chaîne$Variable = "Bonjour tout lemonde";type chaîne#!/usr/bin/perlprint "Calcul dun prix TTCn";#On initialise la valeur de notre taxe$taxe = 0.196;#On demande de rentrer un prix hors taxe$pht = <stdin>;#On enlève le caractère de retour chariotchomp $pht;#Doù la valeur ttc$ttc = $pht+($pht*$taxe);print "Le prix TTC est de : $ttc.n";
  5. 5. Opérateur Dénomination Effet ExempleRésultat (avec $xvalant 7)+ opérateur daddition Ajoute deux valeurs $x+3 10-opérateur desoustractionSoustrait deux valeurs $x-3 4*opérateur demultiplicationMultiplie deux valeurs $x*3 21/plus: opérateur dedivisionDivise deux valeurs $x/3 2.3333333= opérateur daffectationAffecte une valeur à unevariable$x=3Met la valeur 3 dans lavariable $x
  6. 6. Opérateur Dénomination Effet Exemple Résultat. opérateur deconcaténationMet deux chaînes bout àbout$x." chaine"Ajoute la chaîne "chaine" à $xeq opérateur dégalitéCompare deux chaîneset vérifie que leurcontenu est le même$x eq "Bonjour"Retourne 1 si $xcontient la chaîne"Bonjour", sinon 0ltopérateur dinférioritéstricteVérifie quune chaîne eststrictement inférieure àune autre, cest-à-direquelle est située avantdans lordrealphabétique$x lt "Toto"Retourne 1 si $x estinférieure à "Toto", sinon0le opérateur dinférioritéVérifie quune chaîne estinférieure ou égale à uneautre, cest-à-direquelle est située avantdans lordrealphabétique$x le "Toto"Retourne 1 si $x estinférieure ou égale à"Toto", sinon 0gtopérateur de supérioritéstricteVérifie quune chaîne eststrictement supérieure àune autre, cest-à-direquelle est située aprèsdans lordrealphabétique$x gt "Toto"Retourne 1 si $x estsupérieure à "Toto",sinon 0ge opérateur de supérioritéVérifie quune chaîne estsupérieure ou égale àune autre, cest-à-direquelle est située aprèsdans lordrealphabétique$x ge "Toto"Retourne 1 si $x estsupérieure ou égale à"Toto", sinon 0ne opérateur de différenceVérifie quune chaîne estdifférente dune autre$x ne "Toto"Retourne 1 si $x estdifférente de "Toto",sinon 0
  7. 7. $x = $a cmp $b; +1, 0 ou -1$a = lc ("ABCD"); $a = "abcd “$a = lcfirst ("ABCD"); $a = "aBCD“$a = uc ("abcd"); $a = "ABCD“$a = ucfirst ("abcd"); $a = "Abcd“$a = reverse ("abcd"); $a = “dcba“chop($ch) supprime le dernier caractèrechomp() retire le dernier caractère que si ce caractère est un n
  8. 8. #!/usr/bin/perlprint "Des listes et des boucles !n";#Un tableau bien hétérogène !@tablo = (1, 2, 3, "foo", 4, "bar");#Et une boucle une !foreach $valeur (@tablo){#Au passage, faisons une petite concaténationprint $valeur."t";}#Accès à une valeur particulièreprint "nEt si je veux la 4ème valeur du tableau ?n";print "La 4ème valeur du tableau est $tablo[3]n";print "a = @a son dernier indice $#a";@liste1 = ("Un","Deux");@liste2 = ("Zero",@liste1);@vide = ();@B = @A$B[0] #premier element@X = @Y [$i, , $i+3,21];($d,@liste) = ($a,$b,$c);($d,@liste) = ($a,$b,$c);($d,@liste) = ($a,$b,$c);
  9. 9. @liste = (100,101,102,103,104);@x = chop(@liste);print ("liste : @listen");print ("x : @xn");print ("le plus grand indice: $#xn");liste : 10 10 10 10 10x : 4@liste2 = reverse(@liste1);@liste2 = sort(@table1);push (@liste,$val);push (@liste,@val);Ajoute $val (@val) à la fin de la liste @liste$val = pop (@liste);Retire le dernier élément de la liste passée enparamètreunshift (@liste,$val);unshift (@liste,@val);Insère $val (@val) au début de la liste @liste.$val = shift (@liste);Retire le premier élément de la liste passée enparamètre
  10. 10. print "Quelques URLs intéressantesn";#Les clés à gauche de la grosse flèche, les valeurs à droite de la grosse flèche%urls = ("faq_perl"=>"http://perl.developpez.com/faq","faq_linux"=>"http://linux.developpez.com/faq","faq_java"=>"http://java.developpez.com/faq/java");#Une boucle bien utile pour les listes associatives avec une chouette fonctionprint "Listes des urls :n";#Une boucle intéressante pour récupérer les clés et les valeurswhile (($cle, $valeur) = each(%urls)){print $cle." a pour url ".$valeur."n";}#Pour accéder à une valeur particulière si on connait sa cléprint "On ne retient quand même que lurl de la FAQ Perl qui est".$urls{"faq_perl"}."n";%h = (a,A,b,B,c,C,d,D);
  11. 11. @cles = keys(%hash);récupérer dans la liste en question lensemble des clés daccés à un hash$taille = keys(%hash);le nombre déléments dun hashforeach $c(keys(%table)){print "Cle : $c, Valeur : $table{$c}n";}while (($c,$v) = each(%hash)){print "Cle : $c, Valeur : $vn";}ajout$hash($nouvelle_cle) = 3.14159;suppressiondelete ($table{"clé"};
  12. 12.  Le fonctionnement de lopérateur sort() est le suivant : Il vaconsidérer tous les couples de valeurs quil peut fabriqueravec les éléments de la liste passée en paramètre. Ce couplede valeur est retourné dans les deux variables globales $a et$b. Les operateurs<=> (spaceship) et cmp Servirons à affiner letritri lexicographique en ordre croissant :@a = sort @b; équivalent à: @a = sort { $a cmp $b } @b;tri lexicographique en ordre décroissant :@a = sort { $b cmp $a } @b;tri numérique en ordre croissant:@a = sort { $a <=> $b } @b;tri numérique en ordre décroissant:@a = sort { $b <=> $a } @b;
  13. 13. #!/usr/local/bin/perl$Compteur=10;$compteur++; # erreur de frappeprint ($Compteur = ,"$Compteur n");# La valeur affichée est 10, le programmeur# peut ne pas sen apercevoir.#!/usr/local/bin/perluse strict;my $Compteur=10;$compteur++; # erreur de frappeprint ($Compteur = ,"$Compteur n");# Un message derreur est généré à la compilation :# Global symbol "$compteur" requires explicit package name
  14. 14. if expression) {instruction-vraie_1;instruction-vraie_2;} else {instruction-fausse_1;instruction-fausse_2;}unless (expression) {instruction-fausse_1;instruction-fausse_2;instruction-fausse_3;}Lexpression est évaluée comme une chaîne de caractères.Cest une chaîne, elle ne sera pas modifiée.Cest une valeur numérique, elle sera convertie en une chaîne decaractèress.Si la chaîne obtenue est vide ("") ou ne contient que le caractère0 ("0") alors la valeur de lexpression est "faux".Par définition pour toute autre chaîne la valeur de lexpressionest "vrai"La valeur : Convertie en : Donne le résultat :0 "0" faux1-1 = 0 "0" faux1 "1" vrai"" nest pas convertie faux"1" nest pas convertie vrai"0" nest pas convertie faux"00" nest pas convertie vrai"0.00" nest pas convertie vraiundef "" fauxif(exp1) {# exp1-vraie;} elsif (exp2){# exp2-vraie;} elsif (exp3){# exp3-vraie;} else {# Toutes-exp-fauses}
  15. 15. while (expression) {instruction_1;instruction_2;instruction_3;}until (expression) {instruction_1;instruction_2;instruction_3;}for (initial;test;increment){instruction_1;instruction_2;instruction_3;}foreach $i(@liste) {instruction_1;instruction_2;instruction_3;}Modificateurs d’instructioninstruction if (condition);instruction unless (condition);instruction while (condition);instruction until (condition);
  16. 16. $i = 100;print "Avant la boucle, i = $in";@a = (1,2,3,4,5);foreach $i (@a) {print "Pendant la boucle, i = $in";}print "Apres la boucle, i = $in";
  17. 17. #definitionsub Nom_de_la_fonction {Instruction_1;Instruction_2;. . . . .Instruction_n;}#appel&Nom_de_la_fonction;do Nom_de_la_fonction;Nom_de_la_fonction;Nom_de_la_fonction;http://www.dil.univ-mrs.fr/~chris/Perl/Fonctions.htm
  18. 18. open(INFILE, "input.txt") or die "Impossible douvrir input.txt enlecture : $!";open(OUTFILE, ">output.txt") or die "Impossible douvrir output.txt enécriture : $!";open(LOGFILE, ">>my.log") or die "Impossible douvrir logfile en ajout :$!";open (DESC, "+>inout.txt"); or die "Impossible douvrir en lectureécriture: $!";
  19. 19. my $ligne = <INFILE>;my @lignes = <INFILE>;while ( my $ligne = <FICHIER> ){#faire quelque choseprint $ligne;}print STDERR "Dernier avertissement.n" ;print OUTFILE $record;print LOGFILE $logmessage;
  20. 20. #ouvertureopendir (ETC,"/etc") or die "Impossible douvrir /etc";#fermetureclosedir (ETC);#lire le contenue@fichiers= readdir (ETC);#creationmkdir ("repertoire");#creation avec droitsmkdir ("repertoire",0755) ordie "Impossible de créer le repertoire.n";#destructionrmdir ("repertoire") ordie "Impossible de détruire le repertoire.n";#changement du repertoirerename ("nom","repertoire/nom");
  21. 21. opendir (ETC,"/etc")or die "Impossible douvrir /etc";while ($nom = readdir (ETC)) {print ("Le fichier $nom est present dans le repertoire/etc.n");}closedir (ETC);opendir (ETC,"/etc")or die "Impossible douvrir /etc";foreach $nom ( sort readdir (ETC))print ("Le fichier $nom est present dans le repertoire/etc.n");}closedir (ETC);
  22. 22.  La variable par défaut $_ La liste par défaut @_ Le tableau des arguments @ARGV renseignements sur le système %ENV Ligne courante du fichier courant $. Message d’erreur $i
  23. 23. cest lobjet implicite sur lequel sappliquent certainesfonctions ou opérations quand aucune variable nestmentionnée.$_ est litérateur par défaut de foreach quand aucunevariable nest fournie explicitement#!/usr/bin/perlprint "Calcul dun prix TTCn";#On initialise la valeur de notre taxe$taxe = 0.196;#On demande de rentrer un prix hors taxe<stdin>;#On enlève le caractère de retour chariotchomp;#Doù la valeur ttc$ttc = $_+($_*$taxe);print "Le prix TTC est de : $ttc.n";while (<FICHIER> ){print;}
  24. 24. sub inverse{if ($_[0] == 0){print "Division par 0 impossible !n";}else {$resultat = 1/$_[0];return $resultat;}}sub log {my $logmessage = shift;print LOGFILE $logmessage;}my ($logmessage, $priority) = @_; # fréquentmy $logmessage = $_[0]; # plus rare
  25. 25. @ARGV = ("e1.txt","e2.txt");while (<>) {Print;}
  26. 26.  Une expression régulière est constituée dunmodèle (un gabarit) que lon va tenterdassortir à une chaineif ("Hello World" =~ /World/) {print "Il y a correspondancen";}else {print "Il ny a pas correspondancen";}if ("Hello World" !~ /World/) {print "Il ny a pas correspondancen";}else {print "Il y a correspondancen";}
  27. 27. #!/usr/bin/perl;@ARGV = ("Entree.txt");$mot=<STDIN>;while (<>) {if (/$mot/) {print;}}"Hello World" =~ m!World!; #correspond, délimiteur !"Hello World" =~ m{World}; #correspond, notez le couple {}"/usr/bin/perl" =~ m"/perl"; #correspond après /usr/bin#/ devient un caractère comme un autre
  28. 28. "2+2=4" =~ /2+2/;# pas de correspondance, + est un meta-caractère"2+2=4" =~ /2+2/;# correspond, + est traité comme un + ordinaire"The interval is [0,1)." =~ /[0,1)./# cest une erreur de syntaxe !"The interval is [0,1)." =~ /[0,1)./ # correspond"/usr/bin/perl" =~ //usr/bin/perl/; # correspond
  29. 29. "housekeeper" =~ /keeper/; # correspond"housekeeper" =~ /^keeper/; # ne correspond pas"housekeeper" =~ /keeper$/; # correspond"housekeepern" =~ /keeper$/; # correspond"keeper" =~ /^keep$/; # ne correspond pas"keeper" =~ /^keeper$/; # correspond"" =~ /^$/; # ^$ correspond à la chaîne vide
  30. 30. * facteur multiplicatif 0 à n.+ représentant le facteur multiplicatif de 1 à n.? représentant le facteur multiplicatif par 0 ou 1.{n,m} entre n et m/ab*a/ correspond à aa, aba,abba,abbbbbba/xy{2,3}/ On cherche la chaine de caractères constituée ducaractère "x" suivi dun nombre de "y" compris entre 2 et 3/xy{3,}/ On cherche la chaine de caractères constituée ducaractère "x" suivi dun nombre de "y" supérieur ou égal à 3
  31. 31. /cat/; # reconnaît cat/[bcr]at/; # reconnaît bat, cat, ou rat‘/item[0123456789]/; # reconnaît item0 ou ... ou item9‘"abc" =~ /[cab]/; # reconnaît le a‘/[]c]def/; # reconnaît ]def ou cdef$x = bcr;/[$x]at/; # reconnaît bat, cat, ou rat‘Utiliser un intervale avec -/item[0-9]/; # reconnaît item0 ou ... ou item9‘Utiliser la negation avec ^au debut de la classe/[^a]at/; # ne reconnaît pas aat ou at, mais reconnaît# tous les autres bat, cat, 0at, %at, etc./[^0-9]/; # reconnaît un caractère non numérique/[a^]at/; # reconnaît aat or ^at; ici ^ est ordinaire
  32. 32. d est un chiffre et représente [0-9]s est un caractère despacement et représente [ trnf]w est un caractère de mot (alphanumérique ou _) et représente [0-9a-zA-Z_]D est la négation de d; il représente nimporte quel caractère saufun chiffre [^0-9]S est la négation de s; il représente nimporte quel caractère quine soit pas despacement [^s]W est la négation de w; il représente nimporte quel caractère quine soit un pas un caractère de mot [^w]Le point . reconnaît nimporte quel caractère sauf «n»
  33. 33.  d est un chiffre et représente [0-9] s est un caractère despacement et représente [ trnf] w est un caractère de mot (alphanumérique ou _) et représente[0-9a-zA-Z_] D est la négation de d; il représente nimporte quel caractèresauf un chiffre [^0-9] S est la négation de s; il représente nimporte quel caractèrequi ne soit pas despacement [^s] W est la négation de w; il représente nimporte quel caractèrequi ne soit un pas un caractère de mot [^w] Le point . reconnaît nimporte quel caractère sauf «n»
  34. 34. Les parenthèses permettent de mémoriser une chaine de caractèresqui pourra, de cette manière, être référencée ultérieurement./a(.*)b1/ #correspond avec axxxbxxx, axybxy, ayybyy et abmais ne correspond pas avec axxxbxxif ($time =~ /(dd):(dd):(dd)/) {# reconnaît le format hh:mm:ss$heures = $1;$minutes = $2;$secondes = $3;}
  35. 35. dans un contexte scalaire, $time =~ /(dd):(dd):(dd)/ retourne unevaleur vraie ou fausse. Dans un contexte de liste, en revanche, il retournela liste de valeurs reconnues ($1,$2,$3). Nous pouvons donc écrire ducode plus compact :# extraction des heures, minutes et secondes($heures, $minutes, $secondes) = ($time =~ /(dd):(dd):(dd)/);
  36. 36.  Possibilité de mémoriser des élémentsréférencées 1, 2, ..., n dans le corps delexpression et $1, $2, ..., $n dans le corps deprogrammeµ. $& Chaine qui couvre le modèle. $` Partie qui précède le modèle. $ Partie qui suit le modèle
  37. 37. $x = "Time to feed the cat!";$x =~ s/cat/hacker/; # $x contient "Time to feed the hacker!“$y = "quoted words";$y =~ s/^(.*)$/$1/; # suppression des apostrophes,# $y contient "quoted words“$x = "I batted 4 for 4";$x =~ s/4/four/; # ne fait pas tout :# $x contient "I batted four for 4"$x = "I batted 4 for 4";$x =~ s/4/four/g; # fait tout :# $x contient "I batted four for four"
  38. 38.  g Pour general. Change toutes les occurences de la formesélectionnée i Pour ignore case. Ignore le fait que la forme sélectionnéeest en majuscule ou en minuscule. e Pour evaluate. Permet lévaluation de la chaine deremplacement comme une expression. m Pour multiple lines. La chaine de test occupe plusieurslignes. o Pour one. Lévaluation na lieu quune fois. s Pour single line. Le traitement na lieu que sur une ligne. x Pour extended. Permet de présenter une expressionrégulière sur plusieurs lignes.

×