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 :

déclaration d'une constante selon condition


Sujet :

Langage Perl

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Candidat au Club
    Homme Profil pro
    Responsable d'exploitation informatique
    Inscrit en
    Août 2013
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Responsable d'exploitation informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Août 2013
    Messages : 3
    Par défaut déclaration d'une constante selon condition
    Bonjour,

    j'ecris un script à déployer sur différentes distributions Linux et il y aura potentiellement les valeurs différentes pour la même constante.
    Voici un aperçu du code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
     
    use strict;
    use warnings;
     
    my $distrib = "debian";
     
    if ($distrib == "debian") {
      use constant DIR => "/etc/apache2/";
    }
    elsif ($distrib == "RedHat") {
      use constant DIR => "/etc/httpd";
    }
    else {
     use constant DIR => "/etc/tomcat/";
    }
     
    print "DIR.\n";
    (dans les faits, $distrib est affectée via un test).

    quand je lance l'exécution du script, j'ai l'erreur suivante : "Constant subroutine main:IR redifined at /usr/lib/perl5/5.14/constant.pm line 136"
    et le résultat affiché est "/etc/tomcat/" .

    Mes questions :
    - où est mon erreur?
    - comment puis déclarer une constante en fonction d'un test?

    Merci

  2. #2
    Membre chevronné
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2013
    Messages
    247
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2013
    Messages : 247
    Par défaut
    essaies déjà de remplacer les "==" par "eq"

  3. #3
    Candidat au Club
    Homme Profil pro
    Responsable d'exploitation informatique
    Inscrit en
    Août 2013
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Responsable d'exploitation informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Août 2013
    Messages : 3
    Par défaut
    Citation Envoyé par 6ril23 Voir le message
    essaies déjà de remplacer les "==" par "eq"
    Merci pour la correction. Mais ça ne change rien au résultat...

  4. #4
    Membre chevronné
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2013
    Messages
    247
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2013
    Messages : 247
    Par défaut
    Ce qui pourrait répondre à ta demande est l'utilisation de Readonly

  5. #5
    Rédacteur/Modérateur

    Avatar de Lolo78
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Mai 2012
    Messages
    3 612
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2012
    Messages : 3 612
    Billets dans le blog
    1
    Par défaut
    Tu ne peux pas faire cela parce que les constantes sont définies à la compilation, avant toute exécution de code et que le code:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if ($distrib eq "debian") {
    n'est exécuté que plus tard, à l'exécution.

    Tu peux éventuellement utiliser une fonction prototypée:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    sub DIR() {
         return "/etc/apache2/" if $distrib eq "Debian";
         return "/etc/httpd" if $distrib eq "Redhat";
         return "/etc/tomcat/";
    }
    Ensuite, grâce au prototype (les parenthèses () après DIR), tu peux utiliser DIR tout seul (comme bareword). Mais ce n'est pas forcément très pratique pour le chemin d'un répertoire.

    Exemple à la ligne de commande pour une autre utilisation dans laquelle c'est pratique:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $  perl -e '
    > sub PI() { return 3.1416;}
    > print PI * 2, "\n"; '
    6.2832
    Ou sinon, une fermeture anonyme sera plus pratique.

  6. #6
    Candidat au Club
    Homme Profil pro
    Responsable d'exploitation informatique
    Inscrit en
    Août 2013
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Responsable d'exploitation informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Août 2013
    Messages : 3
    Par défaut
    Merci à vous deux.
    L'option Readonly aurait corrigé mes problèmes mais le module n'étant pas installé (et ne le sera pas) , je vais passer par la méthode de Lolo78 qui devrait faire l'affaire pour cette fois.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 15
    Dernier message: 12/04/2007, 15h14
  2. Déclaration d'une constante
    Par jpduches dans le forum Access
    Réponses: 1
    Dernier message: 15/02/2007, 19h07
  3. Transfert vers une table selon condition
    Par Monsieur Peck dans le forum Requêtes et SQL.
    Réponses: 8
    Dernier message: 13/06/2006, 13h34
  4. [HTML][CSS] Redimensionner une image selon condition
    Par Eilkh dans le forum Mise en page CSS
    Réponses: 2
    Dernier message: 14/02/2006, 15h55
  5. [VB.net] Générer une date selon condition
    Par WriteLN dans le forum Windows Forms
    Réponses: 2
    Dernier message: 20/10/2005, 16h12

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