/../
, appelé opérateur de correspondance, qui applique le modèle par défaut sur la variable $_
, et renvoie vrai ou faux.$_
, recherche de la séquence az :
if (/az/) { print $_ ; }
=~
comme dans l'exemple :
if ($var =~ /az/) { print $var ; }
cherche-az
, pour rechercher la séquence "az":
# pour opérer sur toutes les lignes saisies au clavier ou récupérées sur l'entrée standard # rappel : chaque ligne de l'entrée est stockée dans l'argumement par défaut $_ # appel : cat fichier |cherche-az while () { if (/az/) { print $_ ; } } # pour opérer sur toutes les lignes d'un fichier # appel cherche-az open(IN, "~/essai.txt"); while ( ) { chomp($_); if (/az/) { print "$_ \n"; } }
expreg
permettant de reconnaitre le motif. En Perl, cette fonction sera alors notée symboliquement /expreg/
.
if ($var =~ m%expreg%) { print $var }
m
dans l'expression m/regexp/
est habituellement omis si le délimiteur de l'expression est un slash /
./
est présent dans l'expression, il faut le "protéger" par \/
/expreg/
peut être suivi de paramètres dont voici le rôle :
g | la recherche est globale, de toutes les occurences |
i | ne pas distinguer minuscules et majuscules |
s | traiter la chaîne comme une ligne simple (défaut) |
m | traiter la chaîne comme une ligne multiple |
o | ne compiler l'expression qu'une seule fois |
x | utiliser les expressions régulières étendues |
# recherche de "info" en début du texte $mot="info"; $texte=<STDIN>; chomp($texte); if ($texte =~ /^$mot/) { ...
if (=~ /^oui/i) { ...
$inf="informatique"; $opt="option"; $chaine="Toujours pas d'informatique enseigné comme option des lycées en l'an 2000 ..."; if (($chaine =~ /\b$inf\b/i) && ($chaine =~ /\b$opt\b/i)) { print "on parle enfin de l'option info !"; }
undefined
$code = ($chaine =~ /expreg/);
Dans un contexte de liste, la fonction renvoie la liste des éléments qui ont vérifié les expressions entre parenthèses. Si l'expression ne correspondait pas, on obtient une liste nulle.
($href) = ($chaine =~ //i);
Dans tous les cas, la fonction fixera les variables 2, ... avec les éléments qui ont reconnu les expressions entre parenthèses.
split
décompose une chaine en parties toutes séparées par un motif reconnu et construit une liste composée de ces éléments
Exemples
# @mots va contenir la liste des mots de la phrase, séparés par un ou plusieurs espaces $texte="Quel dommage que l'option informatique ait été supprimée !"; @mots= split(/ +/, $texte); # dans la boucle, @liste va contenir la liste de tous les champs (même le second qui est vide) # une ligne étant de la forme jean:x:500:500::/home/jean:/bin/bash $fichier="/etc/passwd"; open(F, $fichier); while (<F>) { @liste = split(/:/); .... } une meilleure solution pour un traitement sur les valeurs de la liste : $fichier="/etc/passwd"; open(F, $fichier); while ($user = <F>) { ($nom, $mdp, $uid, $gid, $titre, $home, $shell) = split(/:/, $user); .... }