IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage Perl Discussion :

perl et variable d'environnement


Sujet :

Langage Perl

  1. #1
    Membre habitué
    Inscrit en
    Janvier 2004
    Messages
    532
    Détails du profil
    Informations forums :
    Inscription : Janvier 2004
    Messages : 532
    Points : 144
    Points
    144
    Par défaut perl et variable d'environnement
    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.

  2. #2
    Membre expert
    Avatar de 2Eurocents
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    2 177
    Détails du profil
    Informations personnelles :
    Âge : 54
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 2 177
    Points : 3 166
    Points
    3 166
    Par défaut
    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";
    }
    Ca convient ?
    La FAQ Perl est par ici
    : La fonction "Rechercher", on aurait dû la nommer "Retrouver" - essayez et vous verrez pourquoi !

  3. #3
    Membre habitué
    Inscrit en
    Janvier 2004
    Messages
    532
    Détails du profil
    Informations forums :
    Inscription : Janvier 2004
    Messages : 532
    Points : 144
    Points
    144
    Par défaut
    merci
    j'ai fait cela, j'ai juste enlever le then que t'avais mis par oubli
    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;
    en faite $ENV c'est un variable deja defini, on a juste a lui mettre parametre le nom de la variable d'environement;
    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
    	}

  4. #4
    Membre habitué
    Inscrit en
    Janvier 2004
    Messages
    532
    Détails du profil
    Informations forums :
    Inscription : Janvier 2004
    Messages : 532
    Points : 144
    Points
    144
    Par défaut
    si je souhaite passé $varenv en parametre
    comment faire ?
    j'ai essayer cela

    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;
    mais sa ne fonctionne et pourtant dans la doc il precise bien qu'il est possible de mettre des parametre au fonction
    Bareword "LANG" not allowed while "strict subs" in use at ./envi.pl line 16.
    Execution of ./envi.pl aborted due to compilation errors.

  5. #5
    Membre habitué
    Inscrit en
    Janvier 2004
    Messages
    532
    Détails du profil
    Informations forums :
    Inscription : Janvier 2004
    Messages : 532
    Points : 144
    Points
    144
    Par défaut
    pour les parametres j'ai compris
    il faut utiliser $_[0]

    et appeler le parametre en quote dans des parenthese
    mafonction ("monparam")

  6. #6
    Membre habitué
    Inscrit en
    Janvier 2004
    Messages
    532
    Détails du profil
    Informations forums :
    Inscription : Janvier 2004
    Messages : 532
    Points : 144
    Points
    144
    Par défaut
    j'essai d'appeler deux fois la fonction

    comme ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    &var_exist ("LANG");
    &var_exist ("PATH");
    et le probleme est que je n'ai que la langue qui s'affiche et non le path.
    et pourtant quand je lance une fois la fonction pour le path elle m'affiche correctement le path

  7. #7
    Membre expert
    Avatar de 2Eurocents
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    2 177
    Détails du profil
    Informations personnelles :
    Âge : 54
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 2 177
    Points : 3 166
    Points
    3 166
    Par défaut
    Citation Envoyé par donny
    j'ai fait cela, j'ai juste enlever le then que t'avais mis par oubli
    Je ne devrais pas pratique plusieurs langages à la fois.

    Citation Envoyé par donny
    en faite $ENV c'est un variable deja defini, on a juste a lui mettre parametre le nom de la variable d'environement;
    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
    Est ce mieux d'utiliser defined au lieu de exists ?
    Non, surtout pas !

    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.

    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});
    Ainsi, l'appel à defined crée l'élément dans le hachage, ce qui n'est pas le but recherché.

    Citation Envoyé par donny
    et pour tester si ma variable d'environement est à vide et n'estp as renseigné j'ai juste à rajouter un elseif comme ceci ??
    Il faut, dans ce cas, enchainer deux tests :
    1. Le premier pour savoir si la variable existe.
    2. 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 !

  8. #8
    Membre habitué
    Inscrit en
    Janvier 2004
    Messages
    532
    Détails du profil
    Informations forums :
    Inscription : Janvier 2004
    Messages : 532
    Points : 144
    Points
    144
    Par défaut
    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 ?

  9. #9
    Membre expert
    Avatar de 2Eurocents
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    2 177
    Détails du profil
    Informations personnelles :
    Âge : 54
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 2 177
    Points : 3 166
    Points
    3 166
    Par défaut
    Citation Envoyé par donny
    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.
    Tu ne m'as pas bien lu.

    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).

    Citation Envoyé par donny
    et pour appeler deux fois la fonction ce n'est pas possible ?
    Ca ne devrait poser aucun problème.
    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 !

  10. #10
    Membre habitué
    Inscrit en
    Janvier 2004
    Messages
    532
    Détails du profil
    Informations forums :
    Inscription : Janvier 2004
    Messages : 532
    Points : 144
    Points
    144
    Par défaut
    je viens de tester avec ! defined
    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");
    et j'ai regarder dans le .bash_profile
    j'ai bien ma var1 car elle existait
    mais il n'a pas crée la var2

  11. #11
    Membre expert
    Avatar de 2Eurocents
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    2 177
    Détails du profil
    Informations personnelles :
    Âge : 54
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 2 177
    Points : 3 166
    Points
    3 166
    Par défaut
    Citation Envoyé par donny
    je viens de tester avec ! defined
    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");
    Ce code est incomplet.

    Tu définis une fonction var_exist, mais tu appelles var_defined.

    Citation Envoyé par donny
    et j'ai regarder dans le .bash_profile
    j'ai bien ma var1 car elle existait
    mais il n'a pas crée la var2
    De plus, après vérification, defined semble finalement ne pas créer la variable dans le hachage.
    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 !

  12. #12
    Membre habitué
    Inscrit en
    Janvier 2004
    Messages
    532
    Détails du profil
    Informations forums :
    Inscription : Janvier 2004
    Messages : 532
    Points : 144
    Points
    144
    Par défaut
    pour tester qu'une variable n'est pas à vide, il faire cela

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    if( $ENV{$_[0]} ne '') {
    		print "Le ".$_[0]." vaut ".$ENV{$_[0]}."\n";
    	}
    et sa ne fonctionne pas

    il m'affiche toujours quelquechose que le variabe soit egale ou differente de vide

Discussions similaires

  1. Réponses: 3
    Dernier message: 09/07/2012, 10h21
  2. variable d'environnement perl
    Par redah75 dans le forum Web
    Réponses: 2
    Dernier message: 22/02/2008, 15h50
  3. [BES] Création d'une variable d'environnement
    Par NGI80 dans le forum Autres
    Réponses: 2
    Dernier message: 17/10/2002, 07h31
  4. nom de fichier et variables d'environnement
    Par joebarthib dans le forum Langage
    Réponses: 2
    Dernier message: 18/07/2002, 15h21
  5. Réponses: 4
    Dernier message: 18/07/2002, 13h32

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo