length($x)#renvoie la longueur de la chaîne $x. Par exemple length("bonjour\n") vaut 8 et length('bonjour\n')
vaut9.
chop($x)# supprime le dernier caractère de la chaîne $x (la variable $x est modifiée). Ce caractère est renvoyé par la fonction : $c = chop($l);
chomp($x)#supprime le dernier caractère de $x s'il s'agit d'une fin de ligne (la variable $x est modifiée). Cette fonction peut prendre plusieurs arguments, chacun subira un sort similaire. Ne pas écrire *incorrect*
$x=chomp($x)#*incorrect* car chomp renvoie le nombre de caractères supprimés. Cette fonction nous sera très utile lorsque nous lirons des fichiers ligne à ligne.
reverse($x)encontextescalaire,# renvoie la chaîne composée des caractères de $x dans l'ordre inverse. Par exemple '
$v=reverse("bonjour\n")#affecte "\nruojnob" à $v. On rencontrera aussi cette fonction chez les listes (son comportement dépend du contexte).'
#Cette fonction peut être une lvalue, c'est-à-dire qu'on peut lui affecter une valeur (lvalue pour left-value : à la gauche du signe égal de l'affectation) :
my$v="salut toi";
substr($v,5,1)="ation à ";
substr($x,offset,length)#vaut la sous-chaîne de position offset et de longueur length. Les positions
commencentà0:substr("bonjour",1,2)#vaut on. La longueur peut être omise, dans ce cas toute la partie droite de la chaîne est sélectionnée.
index($chaîne,$sousChaîne,$position)#renvoie la position de la première occurrence de $sousChaîne dans $chaîne. Le troisième paramètre, s'il est fourni, indique la position du début de la recherche ; sinon la recherche part du début de la chaîne (position 0). ''
rindex($chaîne,$sousChaîne,$position)#effectue la même recherche que la fonction index mais en partant de la fin de la chaîne (la recherche est effectuée de droite à gauche).
instructionwhile(condition);
# Exemple
my$v="##########";
for(my$i=9;$i>0;$i--)
{
print("$i impair\n")
if($i%2);
print("-"x$i."\n")unless($i%3);
substr($v,$i,0)=$i;
}
print("$v\n");
@t=qw/ attention 'aux erreurs' bêtes /;
my$x=shift;# C'est comme si j'avais écrit : = shift @_;
$s=join(" ",1,2,3);#La variable $s vaut alors la chaîne "1 2 3".
$s=join(',',$x,$y,$y);#Les valeurs des trois variables sont jointes en les alternant avec des virgules. Le résultat est affecté à $s.
$s=join(" : ",@t);#La variable vaut alors la concaténation des valeurs du tableau @t avec " : " pour séparateur.
@t=split(/-/,"4-12-455");#Le tableau comporte alors les éléments 4, 12 et 455.
($x,$y)=split(/==/,$v);#Les deux variables auront pour valeur les deux premières chaînes de caractères qui soient séparées par deux signes d'égalité.
printjoin(':',split(/ /,'salut ici'));#Affiche salut:ici (il existe des méthodes plus efficaces et plus lisibles de faire cela...).
$liste2=sort(liste1);
$liste2=sort({comparaison}liste1);
@s=sort({$acmp$b}@t);#La liste @s a pour valeur la liste @t triée selon l'ordre lexical.
@s=sort(@t);#Le fonctionnement est identique à l'exemple précédent.
@s=sort({$a<=>$b}@t);#Le critère de tri est ici numérique.
@s=sort({$a<=>$bor$acmp$b}@t);#Une expression composée peut bien sûr servir de critère : le tri est ici d'abord numérique puis lexical. Cela permet de placer '8 navets' avant '12 carottes', et '12 carottes' avant '12 navets'.
@s=sort({fonction($a,$b)}@t);#Vous pouvez écrire votre propre fonction de tri (à deux arguments) ; elle doit renvoyer un nombre dont la valeur dépend de l'ordre voulu (voir juste avant).
@t=grep{$_<0}$x,$y,$z;#Affecte à @t les éléments négatifs de la liste.
@s=grep{$_!=8and$_!=4}@t;#Met dans @s les éléments de @t différents de 4 et de 8.
@s=map({-$_}@t);#Le tableau @s aura pour valeurs les opposés des valeurs de @t.
@p=map({$_."s"}@t);#Tous les mots de @t sont mis au pluriel dans @p.
@s=map({substr($_,0,2)}@t);#Le tableau @s aura pour valeurs les deux premiers caractères des valeurs de @t.
@s=map({fonction($_)}@t);#Vous pouvez écrire votre propre fonction ; les valeurs qu'elle renverra seront placées dans @s.