Débuter en Perl
Les scalaires
Une variable de type scalaire est un nombre ou une chaîne de caractères. Il n’existe pas de type particulier pour les valeurs entières, les nombres réels, les caractères … Lorsque dans une expression figurent des variables scalaires correspondants à des valeurs de genres différents, Perl effectue des conversions totalement transparentes (et dangereuses).
Les nombres
Les valeurs littérales numériques qui peuvent etre affectées à une variable scalaire s’expriment classiquement:
12 (une valeur entière positive) +10 (une autre valeur entière positive) -34 (une valeur entière négative) +3.14 (un réel positif) 5e15 (5 fois 10 puissance 15) 033 (33 en code octal soit 27 en décimal) x1F (1F en hexa soit 31 en décimal)
Les opérateurs pour les nombres
Les opérateurs arithmétiques sont les suivants:
+ (addition) – (soustraction) * (multiplication) ** (puissance) / (division) % (modulo)
Les opérateurs de comparaison de nombres sont les suivants:
< (inférieur) > (supérieur) <= (inférieur ou égal) >= (supérieur ou égal) == (égalité) != (différence)
Les chaînes de caractères
Une chaîne de caractères Perl comprend de 0 ` a n caractères ASCII dont le code est compris entre 0 et 255. Il n’y a donc pas de restriction sur le caractère NUL ou sur les autres caractères non imprimables. Il y a deux manières de spécifier la valeur littérale d’une chaîne:
– utiliser une simple quote comme délimiteur, le contenu est pris tel que, il n’y a pas d’interprétation de caractères particuliers. Dans ce cas pour introduire une simple quote dans la chaîne, il convient de la précéder d’un antislash (\) , pour introduire un antislash, il faut le doubler.
’Bonjour’ une chaîne ’Bonjour \n’ le \n n’a pas de sens ici ’L\’école’ le \ devant ’ pour l’apostrophe ’c:\\windows\\system’ antislash doublés ’’ chaîne vide
– utiliser une double quote comme délimiteur, certaines séquences de caractères seront interprétées. L’antislash (\) est utilisé ici comme caractère d’échappement et s’utilise comme suit: »\n » une nouvelle ligne « \t » une tabulation « \033 » un caractère codé en octal (33 ici) « \x1F » un caractère codé en hexa (1F ici) « \cA » un caractère de Contrˆole (Ctrl-A ici) « \\ » un \ « \ » » une double quote .Les chaînes de caractères présentées entre double quotes permettent également d’interpréter le contenu de variables (cf. 2.1.4).
Les opérateurs pour les chaînes de caractères
L’opérateur de concaténation est le . (le point):
« Bonjour ». »Monsieur » <==> « BonjourMonsieur » ’Il’.’ ’. »fait beau \n » <==> « Il fait beau \n »
Les opérateurs de comparaison de chaînes de caractères sont les suivants:
eq (égalité) ne (différence) lt (inférieur) gt (supérieur) le (inférieur ou égal) ge (supérieur ou égal)
Les opérateurs q et qq permettent de remplacer respectivement les délimiteurs de chaîne quote et double quote par un délimiteur au choix du programmeur:
$chaine=’S\’il vous plait’; peut aussi s’écrire $chaine=q@s’il vous plait@; C’est le caractère @ qui est ici utilisé comme délimiteur
Les variables scalaires
Une variable scalaire est représentée par une suite de caractère précédée du symbole $. Le premier caractère suivant le $ doit ˆetre une lettre, ensuite on peut trouver un nombre quelconque de chiffres et de lettres. Les majuscules et minuscules sont différenciées et le caractère (souligné) est autorisé:
$Une_Variable un nom de variable correct $une_variable un autre nom de variable $une-variable un nom de variable incorrect (- vs. _)
L’affectation des variables scalaires
L’opérateur d’affectation en Perl est le signe =
$I = 10; (affecte la constante 10 à la variable I) $K = $I + 1; (affectation de I + 1 à la variable K soit 11) $chaine = ’Bonjour’ . ’à tous’; (affectation d’une chaîne)
Les programmeurs SH ou CSH noteront que pour référencer une variable, il convient de précéder son nom par le symbole $ de part et d’autre de l’opérateur d’affectation (le signe =).
Il existe d’autres opérateurs d’affectation, ce sont des raccourcis d’écriture familiers aux programmeurs C:
– affectation et opération combinée
$var += 2; <==> $var = $var + 2; $var *= 3; <==> $var = $var * 3; $chaine .= ’xxx’; <==> $chaine = $chaine . ’xxx’;
– Incrémentation et décrémentation automatique
$I = 10; $I++; <==> $I = $I + 1; donc I = 11 $K = ++$I; <==> $K = $I = $I + 1; donc K = I = 12 $K = $I++; <==> $K = $I; $I = $I + 1; donc K = 12 et I = 13
L’incrément se fait avant l’affectation si l’opérateur précède le nom de la variable (++$I) ou après l’affectation si l’opérateur suit le nom de la variable ($I++).
Interprétation des variables dans une chaîne de caractères
Des variables scalaires peuvent ˆetre interprétées lorsqu’elles sont contenues dans des chaînes de caractères présentées entre double quotes. à cet effet, Perl recherche le caractère $ et considère ce qui le suit comme un nom de variable potentiel. Si la variable existe, son contenu est intégré à la chaîne source, si elle n’existe pas, elle est remplacée par une chaîne vide. Il n’y a qu’un seul niveau d’interprétation, si une variable contient elle mˆeme une chaîne faisant référence à une autre variable, il n’y aura aucun traitement. Pour empécher l’interprétation comme un nom de variable des caractères qui suivent le caractère $, il convient de le précéder d’un antislash ou de placer le morceau de chaîne considéré entre simple quotes.
$chaine1 = « Au revoir »; $chaine2 = « $chaine1 les petits amis »; $chaine3 = « au plaisir « ; $chaine4 = « ${chaine3}de vous revoir »; Les accolades sont utilisées ici comme en sh, csh pour indiquer explicitement la variable à interpréter.
Des fonctions pour manipuler les scalaires
En plus des opérateurs du langage, Perl propose des fonctions (cf. section 11) adaptées au traitement des variables scalaires, parmi celles-ci citons:
– chop() enlève le dernier caractère d’une chaîne; – chomp() enlève le dernier caractère d’une chaîne si celui-ci est un délimiteur de fin de ligne; – chr() convertit une valeur entière en le caractère correspondant du code ASCII; – hex() renvoie la valeur décimale correspondant à une chaîne de caractères héxadécimaux; – oct() renvoie la valeur décimale correspondant à une chaîne de caractère octaux; – index() renvoie la position de la première occurrence d’une sous chaîne dans une chaîne; – lc() convertit une chaîne de caractères en caractères minuscules; – length() indique la longueur en caractère d’une variable scalaire; – rindex() renvoie la position de la dernière occurrence d’une sous chaîne dans une chaîne; – substr() permet d’extraire d’une chaîne une sous chaîne définie en position et longueur.