Copyright © 2004 Arun Mahadevan
sort
sur les valeurs 2, 10 et 1, et dans quel ordre sont-elles triées en temps normal ?unshift
?shift
?Ces questions ont été recueillies à partir de celles réellement posées lors d'une interview sur Perl. Elles sont organisées de manière à pouvoir aider quiconque débute en Perl.
La première ligne d'un script Perl donne le chemin vers un exécutable Perl.
Par exemple : #!/usr/bin/perl
Cette ligne indique à UNIX quel programme utiliser pour lancer effectivement le script. Cette ligne doit correspondre au chemin réel de l'interpréteur Perl.
Oui, il est possible de passer des arguments/paramètres lorsqu'on invoque Perl. Par exemple, #!/usr/bin/perl -w ordonnera à Perl d'activer les messages d'avertissement.
Les arguments/paramètres importants incluent :
-c : vérifie seulement la syntaxe (lance les blocs BEGIN et END)
-d : lance le script avec le débogueur
-P : exécute le préprocesseur C sur le script avant la compilation
-w : active les messages d'avertissement pour la compilation des scripts
perldoc perlrun ou man perlrun donnent une page de manuel contenant une liste complète des arguments.
La valeur d'une variable non initialisée en Perl est null.
Il existe trois types de variables en Perl. Ce sont :
Les scalaires
Les tableaux
Les tableaux associatifs (hash)
Une variable scalaire contient une variable unique. Une variable scalaire peut contenir un nombre, une chaîne de caractères ou une référence. On accède aux scalaires en préfixant son identifiant par $.
Une variable scalaire peut contenir un nombre, une chaîne de caractères ou une référence. Par exemple :
$compteur = 10; #nombre $message = "Hello World"; #chaîne de caractères $ref = \@arr; $ref est une référence au tableau 'arr' |
Les tableaux de Perl sont des collections ordonnées de scalaires. Un nom de tableau commence par un arobase (@). Il n'est pas nécessaire que les éléments d'un tableau soient du même type.
Par exemple :
@tableau = (1, 2, "hello"); |
Comme en C, les crochets [ ] sont utilisés pour faire référence aux éléments, $a[6] est l'élément à l'index 6 dans le tableau @a. Comme en C, les index de tableaux commencent à 0.
Les tableaux associatifs sont une structure de données clé/valeur fournie par Perl. Les tableaux associatifs sont optimisés pour trouver la valeur d'une clé très rapidement. Les variables de tableaux associatifs commencent par un signe pourcent (%) et utilisent les accolades { } pour les accès à une clé particulière. Par exemple :
$capitale{"Kerala"} = "Trivandrum" $capitale{"TamilNadu"} = "Chennai" $capitale{"Karnataka"} = "Bangalore |
Il est souvent plus lisible d'utiliser l'opérateur => entre les paires clé/valeur.
%capitale = ( "Keraka" => "Trivandrum", "TamilNadu" => "Chennai", "Karnataka" => "Bangalore, ); $ville = $capitale{"TamilNadu"}; ## Cherche la clé "TamilNadu" pour obtenir la valeur "Chennai" |
Les tableaux sont utilisés pour enregistrer une liste de scalaires, tandis que les tableaux associatifs sont utilisés pour enregistrer des paires clé/valeur.
Les tableaux sont indexés par des entiers (de 0 à N), tandis que les tableaux associatifs sont indexés par des chaînes de caractères.
Les tableaux utilisent les crochets pour faire référence à un élément (par exemple, $a[4]) tandis que les tableaux associatifs utilisent les accolades pour récupérer la valeur en utilisant sa clé (par exemple $h{"clé"}).
Les clés d'un tableau associatifs sont du type de données « string » (chaîne de caractères).
Il est possible d'utiliser la fonction keys
pour récupérer une liste des clés d'un tableau associatif. Par exemple :
%map = ( rouge => 0xf00, vert => 0x0f0, bleu => 0x00f, ); @couleurs = keys(%map); ## retourne une liste contenant 'rouge', 'vert' et 'bleu' |
Il est possible d'utiliser la fonction values
qui retourne une liste des valeurs d'un tableau associatif. Par exemple :
@listedevaleurs = values(%map); |
Il est possible d'utiliser la fonction sort
pour trier la liste des clés d'un tableau associatif. Par exemple :
sort(keys(%map)) |
retourne une liste triée des clés du tableau associatif %map.
sort
sur les valeurs 2, 10 et 1, et dans quel ordre sont-elles triées en temps normal ?
La fonction sort
trie les éléments dans l'ordre lexicographique. Donc si nous avons une liste contenant les valeurs 2, 10 et 1, la sortie du tri sera 1, 10, 2 (parce que 10 vient avant 2 dans l'ordre lexicographique).
Pour trier les éléments d'une liste dans l'ordre numérique nous devons l'expliciter spécifiquement dans la fonction de tri.
@arr = (1, 2, 10); @liste_triee_numeriquement = sort {$a <=> $b} @arr; #trie dans l'ordre 1, 2, 10 |
Nous pouvons obtenir le nombre d'éléments en évaluant le tableau dans un contexte scalaire, par exemple :
$longueur = @tableau; #assigne la longueur du tableau 'tableau' au scalaire $longueur |
Nous pouvons aussi spécifier explicitement ceci en utilisant la fonction scalar
comme ci-dessous :
$longueur = scalar(@tableau); |
La valeur du dernier index d'un tableau peut être obtenue grâce à $#. Par exemple :
@tableau = ("abc", "def", "efg"); $dernier_index = $#tableau; #dernier_index vaut alors 2 |
On peut utiliser la fonction shift
pour récupérer le premier élément d'un tableau. Par exemple :
@tableau = (2, 4, 6, 8, 10); shift @tableau; #retourne '2' et diminue la taille du tableau d'un élément. Le tableau devient (4, 6, 8, 10) |
unshift
?
unshift
fait l'opération inverse de shift
. Il ajoute une liste au début d'un tableau, et retourne le nouveau nombre d'éléments du tableau.
La syntaxe est : unshift TABLEAU,LISTE;
Par exemple :
@tableau = (5, 6, 7, 8); @tmp = (1, 2, 3, 4) unshift @tableau, tmp; #tableau contient maintenant (1, 2, 3, 4, 5, 6, 7, 8) |
shift
?
Si TABLEAU est omis, la fonction shift
s'applique au tableau @_ (c'est-à-dire la liste d'arguments passée à une sous-routine). Dans la portée du fichier (dans le flot principal du programme), shift
sans argument s'applique à @ARGV (c'est à dire la liste des arguments de la ligne de commande). Par exemple :
#!/usr/bin.perl $var1 = shift; print "\n Shift1 = $var1"; #applique shift au premier argument de la ligne de commande &sub1(100, 200) sub sub1 { $var2 = shift; print "\n Shift2 = $var2"; #récupère 100 de la liste d'arguments (100, 200) |
Une sous routine peut être définie comme ci-dessous :
sub bonjour_monde { print "Bonjour Monde\n"; } |
Cette sous-routine peut être appelée depuis le programme principal par :
bonjour_monde(); |
ou
&bonjour_monde(); |
Le passage de paramètres est similaire à ce qui se fait en C, par exemple :
&sum($a, $b) |
On peut accéder aux paramètres passés via le tableau @_. Par exemple :
sub sum { my ($a, $b) = @_; #'my' est utilisé pour déclarer des variables locales return ($a + $b); } |
Le tableau associatif et les trois variables passeront dans la sous-routine dans une longue liste dans le tableau @_.
La valeur du tableau associatif ne peut pas être récupérée correctement dans la sous-routine puisqu'elle est convertie en une liste.
Lorsque vous passez plus d'une variable incluant un tableau ou un tableau associatif, il est conseillé de passer les variables par référence.
Les variables d'environnement UNIX sont accessibles dans Perl via le tableau associatif %ENV. Par exemple :
$sh = $ENV{'SHELL'}; #donne la valeur de la variable d'environnement $SHELL |
Merci de me faire suivre vos suggestions/retours (en anglais). Merci, Arun.
Copyright © 2004, Arun Mahadevan.
Copying license http://www.linuxgazette.com/copying.html.
Paru dans le n°101 de la Linux Gazette d'avril 2004.
Traduction française par Isabelle Hurbain
<isabelle POINT hurbain CHEZ pasithee POINT net>
.
Relecture de la traduction française par Joëlle Cornavin
<jcornavi CHEZ club TIRET internet POINT fr>
.