salut,
J'aurai aimé savoir si il etait possible avec perl de verifier la presence de variable d'environnement ? ou de voir si ces variables ne sont pas vide ?
Je parle des variables qui se trouve dans le .profile
Merci.
salut,
J'aurai aimé savoir si il etait possible avec perl de verifier la presence de variable d'environnement ? ou de voir si ces variables ne sont pas vide ?
Je parle des variables qui se trouve dans le .profile
Merci.
Ca convient ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 if (exists $ENV{PATH}) then { print "Le PATH vaut".$ENV{PATH}."\n"; }
La FAQ Perl est par ici
: La fonction "Rechercher", on aurait dû la nommer "Retrouver" - essayez et vous verrez pourquoi !
merci
j'ai fait cela, j'ai juste enlever le then que t'avais mis par oubli
en faite $ENV c'est un variable deja defini, on a juste a lui mettre parametre le nom de la variable d'environement;
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14 #!/usr/bin/perl -w use strict; sub var_exist { my $varenv; $varenv='PATH'; if (exists $ENV{$varenv}) { print "Le PATH vaut".$ENV{$varenv}."\n"; exit 1; } } var_exist;
Est ce mieux d'utiliser defined au lieu de exists ?
et pour tester si ma variable d'environement est à vide et n'estp as renseigné j'ai juste à rajouter un elseif comme ceci ??
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 elsif( $ENV{$varenv} eq '' ) { print "Le PATH est vide\n"; exit 1 }
si je souhaite passé $varenv en parametre
comment faire ?
j'ai essayer cela
mais sa ne fonctionne et pourtant dans la doc il precise bien qu'il est possible de mettre des parametre au fonction
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 sub var_exist { my $varenv; if (exists $ENV{$varenv}) { print "Le ".$varenv." vaut ".$ENV{$varenv}."\n"; exit 1; } } var_exist LANG;
Bareword "LANG" not allowed while "strict subs" in use at ./envi.pl line 16.
Execution of ./envi.pl aborted due to compilation errors.
pour les parametres j'ai compris
il faut utiliser $_[0]
et appeler le parametre en quote dans des parenthese
mafonction ("monparam")
j'essai d'appeler deux fois la fonction
comme ceci
et le probleme est que je n'ai que la langue qui s'affiche et non le path.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 &var_exist ("LANG"); &var_exist ("PATH");
et pourtant quand je lance une fois la fonction pour le path elle m'affiche correctement le path
Je ne devrais pas pratique plusieurs langages à la fois.Envoyé par donny
Le hachage @ENV existe et est initialisé par Perl avec le contenu de toutes les variables d'environnement, indexées par leur nom. On utilise donc le nom comme index d'accès.Envoyé par donny
Non, surtout pas !Envoyé par donny
Exists vérifie si un élément existe dans une table de hachage. C'est tout.
Defined ne vérifie pas si l'élément existe, mais si sa valeur est définie, ce qui est différent car s'il n'existe pas, il est créé avec une valeur indéfinie.
Ainsi, l'appel à defined crée l'élément dans le hachage, ce qui n'est pas le but recherché.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 @toto=(); print "$toto{titi} existe\n" if (exists $toto{titi}); print "$toto{titi} est défini\n" if (defined $toto{titi}); print "$toto{titi} existe maintenant\n" if (exists $toto{titi});
Il faut, dans ce cas, enchainer deux tests :Envoyé par donny
- Le premier pour savoir si la variable existe.
- Le second, seulement dans le cas où la variable existe, pour savoir si elle est définie.
La FAQ Perl est par ici
: La fonction "Rechercher", on aurait dû la nommer "Retrouver" - essayez et vous verrez pourquoi !
donc en faite il vaut mieux tester si la variable n'est pas defined (! defined)donc si elle n'est pas defined elle n'existe pas et faire un autre test en dessous qui verifie si la variable contient une valeur (eq '') comme sa si la variable n'est pas defined on ne cherche pas à verifier si elle contient une valeur.
et pour appeler deux fois la fonction ce n'est pas possible ?
Tu ne m'as pas bien lu.Envoyé par donny
Si tu testes à "not defined", tu crée automatiquement la variable avec une valeur indéfinie.
Il faut tester à "exists", et ENSUITE s'intéresser à son contenu (avec des defined ou des eq, c'est comme tu veux).
Ca ne devrait poser aucun problème.Envoyé par donny
Le code de ta fonction doit être incorrect. Montre-nous ton code actuel ...
La FAQ Perl est par ici
: La fonction "Rechercher", on aurait dû la nommer "Retrouver" - essayez et vous verrez pourquoi !
je viens de tester avec ! defined
et j'ai regarder dans le .bash_profile
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 sub var_exist{ if ( ! defined ($ENV{$_[0]}) ) { print "La variable ".$_[0]." n existe pas\n"; } else { print "Le ".$_[0]." vaut ".$ENV{$_[0]}."\n"; } } &var_defined ("var1"); &var_defined ("var2");
j'ai bien ma var1 car elle existait
mais il n'a pas crée la var2
Ce code est incomplet.Envoyé par donny
Tu définis une fonction var_exist, mais tu appelles var_defined.
De plus, après vérification, defined semble finalement ne pas créer la variable dans le hachage.Envoyé par donny
J'ai dû mélanger quelquechose, quelque part sur l'auto-vivification.
Par contre, il n'est pas possible de créer de nouvelles variables d'environnement par ce moyen. En effet, les ajouts dans %ENV seront pris en compte par le script et par tous ses descendants, mais en aucun cas par des processus qui n'en descendent pas. .bash_profile ne sera pas altéré non plus.
La FAQ Perl est par ici
: La fonction "Rechercher", on aurait dû la nommer "Retrouver" - essayez et vous verrez pourquoi !
pour tester qu'une variable n'est pas à vide, il faire cela
et sa ne fonctionne pas
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 if( $ENV{$_[0]} ne '') { print "Le ".$_[0]." vaut ".$ENV{$_[0]}."\n"; }
il m'affiche toujours quelquechose que le variabe soit egale ou differente de vide
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager