Rappels de Perl


Février 2016


Bérénice Batut
berenice.batut@udamail.fr

PDF
# Représentation des données
### Variable ``` $chaine = "une chaine\n"; ```
### Nombre entier ou réel - Opérateurs : `+ - * / ** %` - Comparaison : `< > <= >= == !=`
### Chaîne de caractères - Définition avec des quotes simples ou doubles - Opérateurs : `.` - Comparaison : `lt gt le ge eq ne` - Manipulation : - `length($chaine)` - `chop($chaine)` - `chomp($chaine)` - `reverse($chaine)` - `substr($chaine, 1, 3)` - `index($chaine, " ", 1)` - `rindex($chaine, " ")` Note: - `chop`: suppression du dernier caractère - `chomp`: suppression du dernier caractère si c'est une fin de ligne - `index` : position de la 1er occurrence, avec la position du début de recherche - `rindex` : même chose que `index` mais en partant de la fin
### Tableaux
### Tableaux - Définition : `@tab` - Initiation : - `@tab = (3, "chaine");` - `@t = @tab;` - `@tab = ((1,2),(3,4));` Note: Parler du principe de l'aplatissement des listes
### Tableaux - Parcours : - Début à 0 - `print $tab[1];` - `$tab[2] = 1;` - Manipulation : - `exists($tab[10])` - `defined($tab[10])` - `unshift(@tab,5,6)` - `$v = shift(@tab);` Note: - `exists`: teste l'existence d'un élément d'un tableau - `defined` : teste si l'élement est `undef` ou pas - `unshift`: ajout de valeur en début de tableau - `shif` : supprime et renvoi de le 1er élément
### Tableaux - Manipulation : - `push(@tab, 20);` - `$u = pop(@tab);` - `reverse(@tab);` - `@t = qw(Découpage d'une liste);` - `join(" ", @tab);` - `sort(@tab)` - `@s = grep( /^aa/, @t );` - `@s = map( { -$_ } @t );` Note: - `qw` : coupe une chaine de caractère en 1 liste - `grep` : renvoie liste des éléments correspondant au critère - `map`: applique un bloc d'instruction à tous les éléments d'une liste
### Tableaux associatifs
### Tableaux associatifs - Définition : `%hash` - Initiation : - `@hash = ("id1" => 1, "id2" => "chaine");` - Parcours : - `print $hash{"id2"};` - `$hash{"id1"} = 3;` - `$hash{"id3"} = (1, 4);`
### Tableaux associatifs - Manipulation : - `keys(%hash)` - `values(%hash)` - `each(%hash)` - `delete(%hash, "id1");` - `exists(%hash{"id3"});` - `reverse(%hash);` - Autovivification Note: Autovivification : si on tente de modifier un élément qui n'existe pas, il sera créé 0 pour contexte numérique "" pour une chaîne
# Structures de contrôle
## Instructions de test
### Instructions de test ``` if (expression booléenne) { instructions; }elsif (expression booléenne) { instructions; }else{ instructions; } ```
### Booléens - Valeurs fausses - `0` : Entier valant zéro - `"0"` ou `'0'` - `""` ou `''` - `undef` - Valeurs vraies - Toutes les autres valeurs
### Opérateurs de tests Type | Nombres | Chaînes --- | --- | --- égalité | `==` | `eq` différence | `!=` | `ne` infériorité | `<` | `lt` supériorité | `>` | `gt` inf ou égal | `<=` | `le` sup ou égal | `>=` | `ge` comparaison | `<=>` | `cmp`
### Opérateurs booléens - `&` - `|` - `!`
## Boucles
### Boucles ``` while (condition){ instructions; } ``` ``` for(initialisation; condition; incrément){ instructions; } ``` ``` foreach variable (liste) { instructions; } ``` Que choisir? Quand?
### Boucles - `next` - `last` - `redo` Note: - `next` : fin de l'exécution du bloc - `last` : fin de la boucle - `redo` : redémarrage du bloc
# Manipulation de fichiers
### Ouverture de fichiers ``` open(FILE, "nom du fichier") or die("open: $!"); ``` Caractère(s) | Mode d'ouverture --- | --- `<` | lecture `>` | écriture (écrasement) `>>` | écriture (ajout) `+>` | lecture et écriture (écrasement) `+<` | lecture et écriture (ajout)
### Fermeture ``` close(FILE); ```
### Lecture / écriture de fichiers - Lecture ``` while($ligne = < FILE >){ instructions; } ``` - Écriture ``` print FILE ”chaine à écrire\n”; ```
### Opérateurs sur les noms de fichier ```if operateur nom_fichier``` - `-e` : chemin valable - `-f` : fichier normal - `-d` : répertoire - `-l` : lien symbolique - `-r` : droit de lecture sur le fichier - `-w` : droit d'écriture sur le fichier - `-x` : droit d'exécution du fichier - `-o` : appartenance à l'utilisateur qui exécute le programme - `-z` : fichier vide - `-s` : fichier non vide
# Expression régulières
### Composants - Motif - Chaine de caractères à évaluer - Correspondances
### Fonctionnalités - Recherche de correspondances ``` m/motif/ ``` - Substitution ``` s/motif/chaine_de_remplacement/ ```
### Liaison d'une variable à une expression ` =~ ` - Recherche de correspondances ``` $s =~ m/motif/ ``` - Substitution ``` $s =~ s/motif/chaine/ ```
### Composants de motif : Caractères `m/a/` - Caractères à déspecifier avec `\` - `\ | ( ) [ ] { } ^ $ * + ? . /` - Caractères spéciaux Motif | Caractère --- | --- `\n` | saut de ligne `\r` | retour chariot `\t` | tabulation `\f` | saut de page `\e` | échappement
### Composants de motif : Ensembles (1) - N'importe quel caractère : `.` - Ensemble : `[atc]` - Intervalle : `[a-z]` - Complémentaire : `[^ar]`
### Composants de motif : Quantificateurs | Motif présent | Exemple | Mots matchés --- | --- | --- | --- `*` | 0 fois ou plus | [`m/a*/`](images/rappels/a_etoile.svg) | mot vide, a, aa ... `+` | 1 fois ou plus | [`m/a+/`](images/rappels/a_plus.svg) | a, aa, aaa ... `?` | 0 ou 1 fois | [`m/a?/`](images/rappels/a_interrogation.svg) | mot vide ou a `{n}` | n fois | [`m/a{4}/`](images/rappels/a_4.svg) | aaaa `{n,}` | au moins n fois | [`m/a{2,}/`](images/rappels/a_2_plus.svg) | aa, aaa, aaaa ... `{,n}` | au plus n fois | `m/a{,2}/` | mot vide, a ou aa `{n,m}` | entre m et n fois | [`m/a{2,5}/`](images/rappels/a_2_5.svg) | aa, aaa ou aaaaa
### Composants de motif : Ensembles (2) - `\d` = `[0-9]` - `\D` = `[^0-9]` - `\w` = `[0-9a-zA-Z_]` - `\W` = `[^0-9a-zA-Z_]` - `\s` = `[ \n\t\r\f]` - `\S` = `[^ \n\t\r\f]`
### Composants de motif - Regroupement de plusieurs motifs : `()` `m/meuh{3}/` VS `m/(meuh){3}/` ![meuh](images/rappels/meuh.svg "meuh`") - Alternatives : `|` - Assertions = position dans l'expression - Début : `^` - Fin : `$`
# Fonctions
### Fonction Ensemble d'instructions regroupées de manière à être utilisées plusieurs fois sans avoir à dupliquer du code
### Déclaration d'une fonction ``` sub nomFonction { my ($x,$y,$t) = @_; ... instructions ... return $z; } ```
### Appel à une fonction ``` $v = nomFonction(10, 20, 30); ```
### Visibilité des variables - Variable locale - Variable globale - Variable déclarée avec `my` visible jusqu'à la fin du plus petit bloc qui l'englobe
### Renvoi de plusieurs valeurs Utilisation d'une liste
## Références - [Guide Perl](http://formation-perl.fr/guide-perl.html) - [Visualisation d'expressions régulières](http://regexper.com/) - [Pour aller plus loin sur les expressions régulières](http://slides.seld.be/?file=2015-11-24+How+I+learned+to+stop+worrying+and+love+Regular+Expressions.html#1)
## [Perl orientée object](poo.html)