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 :

affecter valeur '0'


Sujet :

Langage Perl

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    366
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 366
    Points : 116
    Points
    116
    Par défaut affecter valeur '0'
    Bonjour,
    j'ai un petit probleme sur un script perl qui doit récuperer des arguments passés en ligne de commande.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    my $number = shift or usage() and die ;
    usage est une fonction qui affiche la maniere d'utiliser le script si mauvaise saisi.
    Le probleme est que si je rentre la valeur 0 en parametre il ne me la recupere pas et me renvoi a la fonction usage.
    Comment faire alors pour recupérer cette valeur?
    merci

  2. #2
    Membre confirmé
    Avatar de Schmorgluck
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    371
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Mai 2006
    Messages : 371
    Points : 558
    Points
    558
    Par défaut
    Une expression d'affectation a pour valeur celle de la valeur affectée. Par conséquent, $number = shift a pour valeur 0 dans le cas qui te pose problème. Or, 0 est une des valeur que Perl considère comme valant false (en "contexte" booléen). Donc oui, forcément, quand tu entres 0 il execute ce qui suit le "or". Tu procèdes de façon inadéquate. Il vaut mieux vérifier s'il y a des arguments, puis en contrôler le contenu.
    There's nothing like $HOME!

  3. #3
    Membre chevronné
    Avatar de Woufeil
    Profil pro
    Étudiant
    Inscrit en
    Février 2006
    Messages
    1 076
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2006
    Messages : 1 076
    Points : 2 004
    Points
    2 004
    Par défaut
    Je rajouterais que dans ton cas, il faudrait plutôt utiliser defined qu'un booléen (en réalité, ton script est équivalent à usage() and die unless (my $number = shift) )
    "En essayant continuellement, on finit par réussir. Donc : plus ça rate, plus on a de chances que ça marche" (devise Shadock)
    Application :

    ainsi qu'à regarder la avant de poser une question.

    La rubrique Perl recrute, contactez-moi.

  4. #4
    Expert éminent
    Avatar de Jedai
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2003
    Messages
    6 245
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Avril 2003
    Messages : 6 245
    Points : 8 586
    Points
    8 586
    Par défaut
    A partir de Perl 5.10 (qui sortira cette année), tu auras un nouveau connecteur "logique" err qui teste si sa partie gauche est définie, et sinon renvoie sa partie droite, tu pourras alors écrire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    my $number = shift err usage() and die ;
    Mais pour l'instant, tu dois écrire plutôt :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    my $number = shift;
    usage() and die unless defined $number;
    NB : Si les arguments de ton scripts sont complexes, il pourrait être plus raisonnable d'utiliser l'un des modules Getopt::* qui gèrent ce genre de problème correctement.

    --
    Jedaï

Discussions similaires

  1. Réponses: 1
    Dernier message: 21/06/2006, 12h31
  2. [VBA-E]Affecter valeurs noms de fichier d'un répertoire
    Par zzman dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 20/03/2006, 00h28
  3. [Affectation] Valeurs pré-définies
    Par Mister Nono dans le forum Langage
    Réponses: 6
    Dernier message: 23/01/2006, 17h03
  4. Affecter valeur par defaut si champ vide
    Par uloaccess dans le forum Access
    Réponses: 5
    Dernier message: 09/01/2006, 17h12
  5. FORMS : affecter valeur a champ date
    Par sdiack dans le forum Oracle
    Réponses: 1
    Dernier message: 08/12/2005, 23h37

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