ProgrammationDéveloppeur Perl

Décrivez les particularités de l'utilisation des variables en Perl. Quelles sont les différences entre les scalaires, les tableaux et les hachages ? Donnez des exemples d'utilisation de chaque type.

Réussissez les entretiens avec l'assistant IA Hintsage

Réponse

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é

Question piège

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)

Exemples d'erreurs réelles dues à une méconnaissance des subtilités du sujet


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.