Perl (Suite)

alain Adelmar
                                                                          aadelmar@numericable.fr beuuh c est quoi ca

Petit topo sur les variables, il y en a trois sortes
les scalaires
les variables listes ou tableaux
les variables de hashage


les variables scalaires :
Ce sont des variables contenant une valeur singulière, elles peuvent contenir tout types de données, elle sont précédées du caractère $
exemple:
$a = 12;              # la variable $a a pour valeur l'entier 12.
$b = "12";            # la variable $b a pour valeur la chaîne de caractères "12" (un deux)
$c = "chameau";       # la variable $c a pour valeur la chaîne de caractère "chameau"
$totohead = '0 + 0';  # la variable $totohead vaut la chaîne de caractère "0 + 0"
                                            #(zéro plus zéro) ça n'a l'air de rien mais c'est pas grand chose.
$100 = "5 centimes";  # la variable $100 vaut la chaîne "5 centimes"

$prune = "Ce carambar coûte $100, comme les autres";       # $prune vaut "5 centimes"
car avec les guillemets " il y a interpolation et la variable $100 est remplacée par sa valeur, que l'on a vu plus haut "5 centimes".

$prune = 'Ce carambar coûte $100';     # Ceci est une prune car un bon bec à 100 dollars c'est du vol
(pas d'interpolation avec le signe ' apostrophe, dans ce cas la valeur et une chaîne donc pas interprété comme variable)

$mot  qui comme dans notre exemple représentera un mot du fichier dico.txt, et sera compris dans la variable tableau @mots
autre exemple 2 et 3

les variables liste ou variables tableaux:
Les variables tableaux sont des variables contenant d'autres variables scalaires indexées ( indexées par des nombre entier positif et ce d'une manière incrémentale, 0, 1, 2, 3, 4 ....) elles sont précédées du signe @.
@mots  équivaux à ($mot[0], $mot[1], $mot[2], $mot[3] ....jusqu'à  $mot[$#mot - 1] qui représente le dernier élément )
on peut dire que la valeur du dernier index de la liste @mots est égale à $#mot -1

exemple:
@mousquetaires = ("Athos", "Porthos", "Aramis");
# ou
$mousquetaires[0] = "Athos";
$mousquetaires[1] = "Porthos";
$mousquetaires[2] = "Aramis";
nombre max d'éléments du tableau = $#mousquetaires
dernier element = $mousquetaires[$#mousquetaires - 1]    # puisque la liste démarre à 0.

Les variables listes servent à stocker tous les fichiers d'un dossier, toutes les lignes d'un fichier, etc... (c'est le contenant de plusieurs singulier):

@contenu = <FILIN>;        # on assigne le contenu d'un fichier à une variable liste.

une utilité parmi tant d'autre, on peut stocker le contenu des lignes d'un fichier dans une variable tableau pour que à chaque ...:

foreach $ligne(@contenu) {
    if ($ligne =~ /er|ais|ait|aient|é|ez$/i ) {
        print "$ligne" . "poils au nez\n";
        }
    else
        print "$ligne" . "poils au yeux\n";
    }
next if $ligne =~/ul$/;
END

@jour_de_semaine = (dimanche, lundi, mardi, mercredi, jeudi, vendredi, samedi)
$jour_de_semaine[0] = "dimanche";
$jour_de_semaine[1] = "lundi";
$jour_de_semaine[2] = "mardi";
...            ...
$#jour_de_semaine = 7
$jour_de_semaine[$#jour_de_semaine - 1] = samedi;
On dit aussi que la valeur du dernier index est égal au nombre des éléments du tableau moins un.

Quelques exemples : 1 et 2 et 3 et 4 mais aussi le tableau des expressions, fonctions et autre trucs zarbi

les variable de hachage:
Les variables de hachages sont des variables contenant d'autres variables appelées elements, classées par paires clef/valeur, elle sont précédées du signe %.
A la différance des listes ou tableaux, les variables de hashage ne sont pas indexées dans un ordre croissant et pour cause car la clé peut être de toutes nature (alphabétique, alphanumérique, numérique, formule etc.... elle est considéré comme chaîne et indissociable de la valeur qui lui est assigné). On peux donc ajouter un élément sans prendre en compte l'ensemble du hashage, on y fait juste référence.

Assignation d'un hachage
%nom_du_hash{"clé"} = "valeur";
%nom_du_hash = ("clé", "valeur", "clé", "valeur");
%nom_du_hash = qw(
    clé => valeur
    .... => .....
    clé => valeur
);

%jour_de_la_semaine{"dim"} = "dimanche";
%jour_de_la_semaine = qw(
            lun    lundi
            mar    mardi
            mer    mercredi
            jeu    jeudi
            ven    vendredi
            sam    samedi
 );

Il y a de nombreuses façons de sortir un hashage, exemple:(d'un fichier ne comprenant qu'un mot par ligne), style: ligne1 clé, ligne2 valeur, ligne3 clé, ligne4 valeur etc...
fichier du genre:
    dim
    sieste
    lun
    au soleil
    mar
    gras-double

solution possible parmi tant d'autres:
open F, ">$fichier" or die "Ouvrure impossible $!";
while ($cle = <F>) {
    chomp ($cle);
    $valeur = <F>;
    chomp ($valeur);
    $hash{$cle} = $valeur;
}
 

On verra pleins d'autres exemples:
rendez vous pour la suite après demain, si vous le voulez bien je teste pour l'heure l'effet d'un shoubang sans alu mignon avec une table de hash [8O°)   (pfft, pfft, me direz vous)
Pour revenir au hashage, c'est le concept à saisir avec Perl car il permet de faire des merveilles et ce à une vitesse inégalée.