Scripts et Programmation

PERL : Mémo pour scripter

Cet article a été mis à jour, vous consultez ici une archive de cet article!
Table des matières

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 :
Code BASH :
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 :
Code BASH :
print "Bonjour !\n";

Les variables



Affectation de variable



Il faut avant tout déclarer les variables avec my :
Code BASH :
my $a;

Pour mettre dans la variable a la valeur chaîne toto :
Code BASH :
$a="toto"

De la même façon, on peut mettre dans des variables des nombres :
Code BASH :
$a=42

Pour utiliser ces variables, ajouter un $ devant :
Code BASH :
print "$a\n;"
toto

Les tableaux



Création



Pour créer un tableau, on utilise le symbole arobase pour le nommer :
Code BASH :
my @noms = ("pim","pam","poum");

Pour remplir un tableau de 1 à 20, on peut utiliser des raccourcis comme :
Code BASH :
@nombres = (1 .. 20);

Appel des valeurs



On peut appeler les éléments par leur numéro d'index (ça commence à zéro) :
Code BASH :
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 :
Code BASH :
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 :
Code BASH :
delete $tab[index]

Exemple de suppression du 4ème élément (index 3) :
Code BASH :
delete $noms[3];

Transformer une chaine en tableau et inversement



Si on a une chaine du style :
Code BASH :
$copains = "Adrien-Adeline-Mathieu-Marie-Nathalie-Elise";

Et qu'on veut créer un tableau d'après ça, on peut utiliser split :
Code BASH :
@tab = split('séparateur', $chaine);

Exemple :
Code BASH :
@noms = split('-',$copains);

Pour revenir à la chaine créée, on utilise join :
Code BASH :
$chaine = join('séparateur',@tab);

Exemple :
Code BASH :
$copains = join('-',@noms);

Le tri



Pour trier le tableau, par ordre alphabétique par exemple, on utilise sort :
Code BASH :
@tab= sort(@tab);


Les Opérateurs



Les opérateurs de calcul



Si on veut faire une addition :
Code BASH :
$a+3

Si on veut faire une soustraction :
Code BASH :
$a-3

Si on veut faire une multiplication :
Code BASH :
$a*3

Si on veut faire une division :
Code BASH :
$a/3

Les opérateurs de chaines



Si on veut concaténer une variable avec une chaine :
Code BASH :
$b." chaine"


Assigner, incrémenter, décrémenter



Plutôt que de faire un calcule complexe tel que
Code BASH :
$a=$a+2

on a des raccourcis pour faire des calculs sur la variable elle même :
Pour l'addition :
Code BASH :
$a += 2

Pour la soustraction :
Code BASH :
$a -= 2

Pour la multiplication :
Code BASH :
$a *= 2

Pour la division :
Code BASH :
$a /= 2

Pour incrémenter :
Code BASH :
$a=$a++

Pour décrémenter :
Code BASH :
$a=$a++


Les structures conditionnelles : If



Le test "Si'" est généralement fait ainsi :
Code BASH :
if (condition) {
    instructions;
}
else
{
    instructions;
}

Il est possible de faire ça en "oneliner" via :
Code BASH :
(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 à
Code BASH :
if ( $a == $b )

!= : n'est pas égal à
Code BASH :
if ( $a != $b )

> : est plus grand que
Code BASH :
if ( $a > $b )

>= : est plus grand ou égal à
Code BASH :
if ( $a >= $b )

< : est plus petit que
Code BASH :
if ( $a < $b )

<= : est plus petit ou égal à
Code BASH :
if ( $a <= $b )

Comparaison de chaînes



eq : est égal à
Code BASH :
if ( "$a" eq "$b" )

ne : n'est pas égal à
Code BASH :
if ( "$a" ne "$b" )

Ensuite, on peut comparer par ordre alphabétique.
lt : inférieure à (située avant dans l'ordre alphabétique)
Code BASH :
if ( "$a" lt "$b" )

le : inférieure ou égale à (située avant dans l'ordre alphabétique)
Code BASH :
if ( "$a" le "$b" )

gt : supérieure à (située après dans l'ordre alphabétique)
Code BASH :
if ( "$a" lt "$b" )

ge : supérieure ou égale à (située après dans l'ordre alphabétique)
Code BASH :
if ( "$a" le "$b" )

Opérateurs Logiques



|| : OU logique : (or semble fonctionner)
Code BASH :
((condition1)||(condition2))

&& : ET logique :
Code BASH :
((condition1)&&(condition2))

! : NON logique :
Code BASH :
((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 :
Code BASH :
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 :
Code BASH :
unless (condition fausse) {
    instructions
}

For



Pour le for ce n'est pas très compliqué :
Code BASH :
for (compteur; condition; pas) {
    instructions
}

Voici un exemple simple :
Code BASH :
for ($i=1; $i<10; $i++) {
    print $i;
}

While



De manière générale, la syntaxe est la suivante :
Code BASH :
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 :
Code BASH :
until (condition) {
    instructions
}

Foreach



La boucle foreach permet de parcourir une liste ou un tableau :
Code BASH :
foreach (LISTE) {
    instructions;
}

Exemple :
Code BASH :
foreach (@tableau) {
    print $_;
}