En Perl, le tableau associatif global %ENV contient les variables d'environnement actuelles du processus. Toute manipulation de ce hash se reflète directement dans l'environnement du processus et, par conséquent, dans les processus fils créés via system, exec, open, etc.
Exemple d'utilisation :
print $ENV{"HOME"}; # Obtenir le chemin du répertoire personnel de l'utilisateur $ENV{"PATH"} = "/usr/bin"; # Réécrire la variable PATH
Subtilités :
%ENV affecte instantanément toutes les commandes shell futures lancées depuis ce processus Perl.undef ou la suppression d'un élément retire la variable d'environnement correspondante.%ENV, surtout dans les scripts CGI ou systèmes.exists $ENV{"VAR"}.L'opération
$ENV{"MYVAR"} = undefsupprime-t-elle la variable d'environnement ?
Réponse : Non ! Cela assigne simplement la valeur undef à la variable, mais la clé reste dans le hash ! Pour supprimer la variable d'environnement, utilisez delete $ENV{"MYVAR"}.
# NE supprime pas la variable de l'environnement $ENV{"FOO"} = undef; # Correct - supprime delete $ENV{"FOO"};
Histoire
Sur un serveur web, lors de la purification de l'environnement pour des raisons de sécurité, le programmeur assignait undef au lieu de supprimer les variables. Les variables n'ont pas disparu et pouvaient être utilisées par des attaquants, provoquant une vulnérabilité d'exécution de commandes avec des chemins dangereux dans PATH.
Histoire
Lors du passage de variables d'environnement aux sous-processus, les anciennes variables ont été oubliées, causant des échecs inattendus dans les utilitaires tiers exécutables et un comportement incorrect du programme.
Histoire
En essayant de nettoyer tout l'environnement pour le processus fils, le script faisait simplement %ENV = ();, mais sans vérifier au préalable les variables nécessaires. Cela a causé des plantages, car plusieurs services nécessitent des clés d'environnement obligatoires (par exemple, USER ou des variables de localisation).