Vendredi 23 novembre 2018

PERL : Mémo pour scripter Introduction

Je script, je script, mais parfois, j’ai un sacré trou de mémoire … et je galère à trouver ce que je cherche sur Internet. Comment on incrémente une variable ? Comment on fait un SI, un POUR ? Et bien la réponse se trouve ci-dessous !

Rappels de base

Dans tous mes scripts Perl, j’utilise :

``` use strict; use warnings;

Cela force l’initialisation propre des variables et permet d’être rigoureux dans le code.

Je rappelle aussi que toutes les lignes se terminent par un point-virgule, et que lorsqu’on affiche avec print une variable, il faut penser à effectuer le saut de ligne avec \n :

```perl print “Bonjour !\n”;

Les variables

Affectation de variable

Il faut avant tout déclarer les variables avec my :

```perl my $a;

Pour mettre dans la variable a la valeur chaîne toto :

```perl $a=”toto”

De la même façon, on peut mettre dans des variables des nombres :

```perl $a=42

Pour utiliser ces variables, ajouter un $ devant :

```perl print “$a\n;” toto

Les tableaux

Création

Pour créer un tableau, on utilise le symbole arobase pour le nommer :

```perl my @noms = (“pim”,”pam”,”poum”);

Pour remplir un tableau de 1 à 20, on peut utiliser des raccourcis comme :

```perl @nombres = (1 .. 20);

Appel des valeurs

On peut appeler les éléments par leur numéro d’index (ça commence à zéro) :

```perl print “$noms[0]”;

Ajouter et supprimer des éléments

On a à notre disposition 4 fonctions :

push(@tab, "Valeur") : Ajoute un élément à la fin du tableau
unshift(@tab, "Valeur") : Ajoute un élément au début du tableau
pop(@tab) : Supprime le dernier élément du tableau
shift(@tab) : Supprime le premier élément du tableau

Exemple :

push(@noms, “adrien”); unshift(@noms, “adeline”); pop(@noms); shift(@noms);

On peut aussi supprimer un élément bien précis du tableau en fonction de son nom :

delete $tab[index]

Exemple de suppression du 4ème élément (index 3) :

delete $noms[3];

Transformer une chaine en tableau et inversement

Si on a une chaine du style :

$copains = “Adrien-Adeline-Mathieu-Marie-Nathalie-Elise”;

Et qu’on veut créer un tableau d’après ça, on peut utiliser split :

@tab = split(‘séparateur’, $chaine);

Exemple :

@noms = split(‘-‘,$copains);

Pour revenir à la chaine créée, on utilise join :

$chaine = join(‘séparateur’,@tab);

Exemple :

$copains = join(‘-‘,@noms);

Le tri

Pour trier le tableau, par ordre alphabétique par exemple, on utilise sort :

@tab= sort(@tab);

Les Opérateurs

Les opérateurs de calcul

Si on veut faire une addition :

$a+3

Si on veut faire une soustraction :

$a-3

Si on veut faire une multiplication :

$a*3

Si on veut faire une division :

$a/3

Les opérateurs de chaines

Si on veut concaténer une variable avec une chaine :

$b.” chaine”

Assigner, incrémenter, décrémenter

Plutôt que de faire un calcule complexe tel que

$a=$a+2

on a des raccourcis pour faire des calculs sur la variable elle même :

Pour l’addition :

$a += 2

Pour la soustraction :

$a -= 2

Pour la multiplication :

$a *= 2

Pour la division :

$a /= 2

Pour incrémenter :

$a=$a++

Pour décrémenter :

$a=$a++

Les structures conditionnelles : If

Le test “Si’” est généralement fait ainsi :

if (condition) { instructions; } else { instructions; }

Il est possible de faire ça en “oneliner” via :

(condition) ? instruction si vrai : instruction si faux

Pour les exemples, nous avons besoin d’opérateurs de comparaison, voir ci-dessous.

Les opérateurs de comparaison

Comparaison d’entiers

== : est égal à

if ( $a == $b )

!= : n’est pas égal à

if ( $a != $b )

: est plus grand que

if ( $a > $b )

= : est plus grand ou égal à

if ( $a >= $b )

< : est plus petit que

if ( $a < $b )

<= : est plus petit ou égal à

if ( $a <= $b )

Comparaison de chaînes

eq : est égal à

if ( “$a” eq “$b” )

ne : n’est pas égal à

if ( “$a” ne “$b” )

Ensuite, on peut comparer par ordre alphabétique.

lt : inférieure à (située avant dans l’ordre alphabétique)

if ( “$a” lt “$b” )

le : inférieure ou égale à (située avant dans l’ordre alphabétique)

if ( “$a” le “$b” )

gt : supérieure à (située après dans l’ordre alphabétique)

if ( “$a” lt “$b” )

ge : supérieure ou égale à (située après dans l’ordre alphabétique)

if ( “$a” le “$b” )

Opérateurs Logiques

  : OU logique : (or semble fonctionner)
((condition1)   (condition2))

&& : ET logique :

((condition1)&&(condition2))

! : NON logique :

((condition1)!(condition2))

Les structures conditionnelles Partie 2

If elsif else

Perl n’inclut pas de fonction Switch par défaut (il faut installer le module Switch pour ça). On peut donc chainer les if avec des elsif :

if (condition) { instructions; }

elsif (condition) { instructions; } else (condition) { instructions; }

unless (if inversé)

L’instruction unless est identique au if, c’est juste que ça exécute les instructions si la condition est fausse :

unless (condition fausse) { instructions }

For

Pour le for ce n’est pas très compliqué :

for (compteur; condition; pas) { instructions }

Voici un exemple simple :

for ($i=1; $i<10; $i++) { print $i; }

While

De manière générale, la syntaxe est la suivante :

while (condition) { instructions }

Voici un exemple :

Until (while inversé)

L’instruction until est identique au while, c’est juste que ça exécute les instructions si la condition est fausse :

until (condition) { instructions }

Foreach

La boucle foreach permet de parcourir une liste ou un tableau :

foreach (LISTE) { instructions; }

Exemple :

foreach (@tableau) { print $_; }