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.
Version imprimable
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:
1
2
3 if (exists $ENV{PATH}) then { print "Le PATH vaut".$ENV{PATH}."\n"; }
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:
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:
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 fonctionCode:
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;
Citation:
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:
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
:oops: Je ne devrais pas pratique plusieurs langages à la fois.Citation:
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.Citation:
Envoyé par donny
Non, surtout pas !Citation:
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:
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 :Citation:
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.
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 ?
:nono: Tu ne m'as pas bien lu.Citation:
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.Citation:
Envoyé par donny
Le code de ta fonction doit être incorrect. Montre-nous ton code actuel ...
je viens de tester avec ! defined
et j'ai regarder dans le .bash_profileCode:
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. ;)Citation:
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. :oops:Citation:
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.
pour tester qu'une variable n'est pas à vide, il faire cela
et sa ne fonctionne pasCode:
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