# 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
- 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
- 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
### 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
```
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
### 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 : `$`
### 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)