home www.shellunix.com commandes Unix Shell unix: sh Shell unix: csh Shell unix: ksh expressions régulières sed awk perl

Obtenir l'aide mémoire Unix au format pdf


Perl

Les variables

Scalaire

Symbole

$

Définition

Contient une seule valeur, que ce soit un numérique (entier, virgule flottante, notation scientifique), ou un alphanumérique.

Les variables alphanumériques

Une chaine de caractères est delimités générallement par des ' ou des ",mais il en existe d'autre:
Délimiteur Génerique Signification
' q/.../ pas d'interpolation
" qq/.../ Interpolation de $ et @ et interprétation de \
` qx/.../ exécution d'un programme externe et renvoie la sortie du programme,Interpolation de $ et @.
( qw/.../ pas d'Interpolation
Vous pouvez utiliser n'importe quel délimiteur non alphanumérique et non blanc à la place du /. Si vous utilisez [, (, { ou < alors le délimiteur fermant doit correspondre : ], ), } ou >. exemple :

Quelques caractères spéciaux

Code Signification
\n Saut de ligne
\r Retour chariot
\t Tabulation
\f Saut de page
\b Backspace
\a Bell
\e Echappement en caractère
\033 Echappement en octal
\x7f DEL en hexadécimal
\cC Controle C
\u Force le caractère suivant en majuscule
\l Force le caractère suivant en minuscule
\U Force tous les caractères suivant en majuscule jusqu'à \E
\L Force tous les caractères suivant en minuscule jusqu'à \E
\Q Préfixe par \ tous les caractères non alphanumériques jusqu'à \E
\E Fin de \U, \L et \Q

Fonctions utiles

chomp
enleve le retour chariot qui est eventuellement à la lin de la chaine
chomp ; equivaut à chomp $_ ;
chop
enleve le dernier caractère à la lin de la chaine
chop ; equivaut à chop $_ ;
length
renvoie la longueur de la chaine

Tableau

Symbole

@

Définition

Une liste de valeur indexée par numéro.La liste peut contenir des nombres, des chaines de caractères ou un mélange des deux.

Utilisation

@couleur = ( "bleu" , "rouge" , "vert" , "jaune" ) ;
On peut faire une affectation inverse :
($Couleur1 , $couleur2, $couleur3, $couleur4) = @couleur ;
Par exemple, pour inverser deux variables :
($var1, $var2) = ($var2, $var1) ;
On peut également acceder aux élément d'un tablean par son numéro (Ne pas oublier qu'un tablean commence à 0 comme en C):
$couleur[0] = "bleu" ;
$couleur[1] = "rouge" ;
$couleur[2] = "vert" ;
$couleur[3] = "jaune" ;

Fonctions utiles

push @liste1 , liste2
ajoute la liste2 à la liste1 et renvoie le nombre d'éléments de la nouvelle liste
ex : @liste = ( 1 , 2 , 3 ) ;  
  push @liste (4) ; la liste vaut ( 1 , 2 , 3 , 4 )
  push @liste (5 , 6) ; la liste vaut ( 1 , 2 , 3 , 4 , 5 , 6 )
pop @liste
enleve le dernier element de la liste et le renvoie.
grep exp liste
evalue l'expression pour chaque element de la liste, renvoie la liste des elements pour lequel l'expression est vrai, ou renvoie le nombre d'expressions vraies dans un contexte scalaire.
map exp liste
evalue l'expression pour chaque element de la liste, renvoie la liste de tous les elements evalués.
reverse liste
renvoie la liste avec les éléments en ordre inverse.
shift liste
enleve la premiere valeur de la liste et la renvoie.
sort liste
renvoie la liste triée.
split critere , chaine
decoupe la chaine en prenant le critere comme caractère de séparation

Table de hachage

Symbole

%

Définition

Un groupe de valeurs non ordonnés indexé par chaine.

Affectation

Puisque la table de hachage n'est pas ordonnée, on doit l'initialiser par paire :
%traduction = ("chien", "dog","chat","cat","vache","cow","cochon","pig) ;
Cette notation n'etant pas tres facile à lire, on peut aussi écrire :
%traduction = ( "chien" => "dog",
"chat" => "cat",
"vache" => "cow",
"cochon" => "pig") ;
Pour trouver la valeur associé à chat, il suffit d'écrire : $traduction{"chat"},
Et pour affecter une nouvelle valeur : $traduction{"mouton"} = "sheep" ;

Fonctions utiles

keys, sort

Sous-programme

Symbole

&

Définition

Portion de code perl

Affectation

Fonctions utiles

Type glog

Symbole

*

Définition

pointeur

Affectation

Fonctions utiles

Opérateurs

Opérateurs arithmétiques

Opération Exemple Explication
Addition $a + $b  
Soustraction $a - $b  
Multiplication $a * $b  
Division $a / $b  
Module $a % $b Reste de la division de $a par $b
Puissance $a ** $b $a puissance $b

Opérateurs sur les chaines

l'opérateur de concaténation est le point .
Il existe aussi un opérateur de multiplication x ou encore repeat :
"abc" x 3 vaut "abcabcabc"

Opérateurs d'assignation

l'opérateur d'assignation est =
Comme en C, il existe des abréviation pour les affectations :
$a += 2 ; : On ajoute 2 à a
$chaine .= "\n" ; : on ajoute un saut de ligne à la fin de la chaine

Opérateurs d'auto-incrément, auto-décrément

Comme en C, on peut utiliser $a++ et ++$a pour incrémenter de 1 et $a-- et --$a pour décrémenter de 1 la variable $a

Opérateurs logiques

Exemple Signification
$a && $b Et
$a and $b
$a || $b Ou
$a or $b
! $a Non
not $a

Opérateurs de comparaison

Fonction Opérateur numérique Opérateur de chaine Valeur de retour
Egal $a == $b $a eq $b Vrai si $a est égal à $b
Différent $a != $b $a ne $b Vrai si $a est différent de $b
Inférieur $a < $b $a lt $b Vrai si $a est inférieur à $b
Supérieur $a > $b $a gt $b Vrai si $a est supérieur à $b
Inférieur ou égal $a <= $b $a le $b Vrai si $a est inférieur ou égal à $b
Supérieur ou égal $a >= $b $a ge $b Vrai si $a est supérieur ou égal à $b
Comparaison $a <=> $b $a cmp $b 0 si $a = $b,
1 si $a > $b,
-1 si $a < $b

Opérateurs de test des fichiers

Test Explication
-e $fich Vrai si le fichier $fich existe
-r $fich Vrai si le fichier $fich est accessible en lecture
-w $fich Vrai si le fichier $fich est accessible en écriture
-d $fich Vrai si le fichier $fich est un répertoire
-f $fich Vrai si le fichier $fich est un fichier ordinaire
-T $fich Vrai si le fichier $fich est un fichier texte

Structures de controle

Définition des booléens

if

if ( test )
{
...
}
    ou     if ( test )
{ ... }
elsif ( test )
{ ... }
else
{ ... }

unless

unless ( test )
{
...
}

while

while ( test )
{
...
}

until

untill ( test )
{
...
}

for

for ( init ; cond ; incr )
{
...
}

foreach

foreach $var (@liste)
{
...
}

next, last

Pour modifier le flux d'une boucle :
next : sauter à la fin de l'itération courante et commence l'itération suivant.
last : sauter à la fin du bloc et sortir de la boucle.
On peut également mettre des etiquettes pour specifier la boucle correspondante :
BOUCLE: while ( $ligne = )
{
last BOUCLE if $ligne eq "FIN" ;
next BOUCLE if $ligne eq "" ;
$num_ligne ++ ;
}

Les expressions régulières

Vous pouvez consulter la page Expressions régulières pour une première approche.
Une expression régulière sert à caracteriser un motif dans une chaine de caractères. Son séparateur est le / :
    /.../   ou  m/.../  Recherche de motif
s/.../.../  Substitution
y/.../.../   ou   tr /.../.../  Traduction

Ce qui est caractérisé, c'est la plus grande chaine qui correspond au motif :
si je cherche /a.*b/ dans la chaine abcabcabc, je recupere abcabcab.

Meta caractères

Voici la signification des méta-caractères : (Seul seront expliqué en détail les caractères qui ne sont pas expliqués sur la page expressions régulières)

^ Début de ligne
$ Fin de ligne
\ Banaliseur (sauf pour les caractères alphanumériques, voir ci-dessous)
| Alternative
(...) regroupement
\A Debut de la chaine
\Z Fin de la chaine
\G Recherche depuis la fin de la dernière recherche m/.../g.
. n'importe quel caractère (sauf \n)

Quantificateur

? zero ou une fois.
+ une fois ou plus.
* zero fois ou plus.
{n} n fois.
{n,} au moins n fois.
{n,m} au moins n fois mais pas plus de m fois.

Caractères spéciaux

\n Saut de ligne
\r Retour chariot
\t Tabulation
\f Saut de page
\e Echappement
\d Un chiffre ([0-9])
\D Un non-numérique
\w un alphanumérique (y compris _)
\W un caractère non alphanumérique
\s un espace ([ \t\n\r\f])
\S un caractère autre qu'un espace
\b terminaison d'un mot ([,;.!?\n:]
\B un caractère qui n'est pas une limite de mot

Exemples

Programme perl Resultat
my $chaine = "1ere ligne\n deuxieme ligne\n" ;
$chaine .= " troisieme ligne\n et la derniere ligne\n" ;
print "Chaine originale : \n $chaine" ;
Chaine originale :
1ere ligne
 deuxieme ligne
 troisieme ligne
 et la derniere ligne
$chaine =~ s/ligne\Z/line/ ;
print "Substitution 1 : \n$chaine" ;
On subtitue l'occurence qui est en fin de chaine
Substitution 1 :
1ere ligne
 deuxieme ligne
 troisieme ligne
 et la derniere line
$chaine =~ s/ligne/line/ ;
print "Substitution 2 : \n$chaine" ;
On subtitue la première occurence
Substitution 2 :
1ere line
 deuxieme ligne
 troisieme ligne
 et la derniere line
$chaine =~ s/\w*/first/ ;
print "Substitution 3 : \n$chaine" ;
On subtitue le premier mot
(c'est à dire un ensemble de caractères alphanumériques)
Substitution 3 :
first line
 deuxieme ligne
 troisieme ligne
 et la derniere line
$chaine =~ s/^\s+//g ;
print "Substitution 4 : \n$chaine" ;
On supprime les blancs en debut de ligne,
pour toutes les occurences
Substitution 4 :
first line
 deuxieme ligne
 troisieme ligne
 et la derniere line
$chaine =~ s/^\s+//m ;
print "Substitution 5 : \n$chaine" ;
On supprime les blancs en debut de ligne,
en tenant compte du fait que l'on a une variable multiligne
Substitution 5 :
first line
deuxieme ligne
 troisieme ligne
 et la derniere line
$chaine =~ s/^\s+//gm ;
print "Substitution 6 : \n$chaine" ;
On supprime les blancs en debut de ligne,
pour toutes les occurences
et en tenant compte du fait que l'on a une variable multiligne
Substitution 6 :
first line
deuxieme ligne
troisieme ligne
et la derniere line
$chaine =~ s/\n\s*\w*/,second/ ;
print "Substitution 7 : \n$chaine" ;
On substitue à un retour chariot suivi de blancs et d'un mot, le mot second
On substitue donc le premier mot de la deuxieme ligne
en supprimant le retour chariot et les blancs en début de ligne
Substitution 7 :
first line,second ligne
troisieme ligne
et la derniere line
$chaine =~ s/\bs/S/gm ;
print "Substitution 8 : \n$chaine" ;
On passe en majuscule tous les s qui sont en debut de mot
Substitution 8 :
first line,Second ligne
troisieme ligne
et la derniere line

Les fichiers

Handles de fichiers

Le handle est le moyen qui permet de communiquer avec un fichier, un périphérique, un pipe... Pour le créer, on peut utiliser la fonction open :
Open(FICH,"nomfichier") ; Lire depuis un fichier existant.
Open(FICH,"<nomfichier") ; Lire depuis un fichier existant.
Open(FICH,">nomfichier") ; Créer et écrire dans un fichier.
Open(FICH,">>nomfichier") ; Ajouter à la fin d'un fichier existant.
Open(FICH,"| nomfichier") ; filtre de sortie.
Open(FICH,"nomfichier |") ; Filtre d'entrée.
Perl fournit quelques handle de fichiers prédéfinis:
    STDIN     entrée standard du programme
STDOUT sortie standard
STDDERR un canal de sortie supplémentaire qui correspond à la sortie en erreur sous Unix
On peut ensuite utiliser ce handle pour accéder au fichier ou au pipe, jusqu'à sa fermeture (avec la commande close(FICH))
Pour acceder à une ligne du fichier, on utilise l'opérateur diamant : <FICH> .
Exemple :
        print STDOUT "Quel est votre nom?" ;
        $nom = <STDIN> ;
        print "Bonjour $nom \n" ;

 

 


Obtenir l'aide mémoire Unix au format pdf

home www.shellunix.com commandes Unix Shell unix: sh Shell unix: csh Shell unix: ksh expressions régulières sed awk perl

© Isabelle Vollant (http://www.shellunix.com)
mise à jour le 27/08/10