En Perl, les variables sont divisées en scalaires ($), tableaux (@) et hachages (%):
Scalaires ($variable) – stockent une seule valeur (chaîne, nombre) :
my $name = "Ivan"; my $age = 30;
Tableaux (@array) – ensemble d'éléments ordonnés (indexés par des nombres) :
my @fruits = ("apple", "banana", "cherry"); print $fruits[1]; # banana
Hachages (%hash) – ensemble de paires clé-valeur (tableau associatif) :
my %colors = (red => "#ff0000", green => "#00ff00"); print $colors{"red"}; # #ff0000
Notez que pour accéder à un élément, un symbole spécifique est utilisé selon le type de variable :
$array[0] — élément du tableau$hash{"key"} — valeur du hachage par cléQuelles sont les différences entre les expressions @array[1,2] et $array[1,2] ?
Réponse :
@array[1,2]— fournit une liste avec plusieurs éléments du tableau (slice).$array[1,2]— incorrect, entraîne une erreur. Pour accéder à plusieurs éléments du tableau, on utilise uniquement la slice@array[...].Exemple :
my @array = (10, 20, 30, 40); my @slice = @array[1,2]; # (20, 30)
Histoire
Dans un projet de journalisation, un programmeur a tenté d'accéder à un élément du hachage via
@colors{"red"}. En conséquence, il ne récupérait pas la valeur du hachage, mais une erreur aléatoire, car pour une valeur unique, un$est nécessaire, pas@.
Histoire
Dans un service, pour itérer sur les indices d'un tableau, ils ont oublié d'utiliser la syntaxe correcte — au lieu de
$array[$i], ils ont utilisé@array$i, ce qui entraînait des avertissements et des résultats incorrects.
Histoire
Dans un projet API, une fonction a été décrite comme prenant un tableau
$args, mais lors de l'appel, un tableau a été passé sans scalaire :func(@list). Il s'est avéré qu'ainsi, les éléments du tableau "se dépliaient" en une liste, et la fonction ne fonctionnait pas comme prévu. Il aurait été correct de prendre le tableau comme@args.