Le modificateur undef en Perl est utilisé pour remettre explicitement à zéro les variables (scalars, tableaux, hachages) ou des valeurs supprimées. En appliquant undef, le développeur informe l'interpréteur que la valeur de la variable est maintenant "non définie". Cela peut être utile lors du nettoyage de la mémoire ou de la réinitialisation de la logique.
Exemples :
my $var = 42; undef $var; # $var est maintenant non défini my @array = (1, 2, 3); undef @array; # Le tableau est vidé, length = 0 my %hash = (a => 1, b => 2); undef %hash; # Hachage vide
Nuances :
undef ne supprime pas la variable elle-même, elle reste dans la portée, mais perd sa valeur.undef vide toute la structure. Pour des éléments individuels, utilisez delete $hash{key} ou splice / pop / shift pour les tableaux.$var = '' ou un tableau/hachage avec une liste vide).
undefpeut-il affecter la taille d'un tableau ou le nombre d'éléments dans un hachage ?
Réponse : Oui ! Pour les tableaux, après undef @arr, leur longueur (scalar @arr) devient 0. Pour un hachage, undef %hash vide complètement la structure. Ce n'est pas la même chose que l'affectation d'une liste vide (@arr = ();), mais le résultat est identique en longueur. Ne confondez pas avec undef $arr[0], qui ne met à zéro qu'un élément, mais ne réduit pas la taille !
my @arr = (1, 2, 3); undef @arr; # @arr est maintenant vide (length == 0) my @arr2 = (1, 2, 3); undef $arr2[1]; # Maintenant $arr2[1] == undef, mais @arr2 reste (1, undef, 3), longueur = 3.
Histoire
Dans un projet, un développeur nettoyait un tableau avec undef $array[0], s'attendant à libérer ainsi toute la structure. Mais les éléments restants ont été laissés en attente et le code devenait instable lors de la gestion des indices.
Histoire
Dans un autre projet, un programmeur affectait undef à un scalar au lieu de nettoyer un tableau, donc le tableau restait le même, et le bug allongeait la liste de dizaines de milliers d'éléments, provoquant un Out-of-Memory.
Histoire
Lors de l'écriture de la logique de vérification de la vacuité d'un hachage, on confondait la différence entre undef %hash et la suppression de toutes les clés par une boucle. Parfois, après undef, plutôt que de réinitialiser, un accès inattendu au hachage se produisait, ce qui causait des erreurs logiques et une recréation répétée...