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 :

erreur compilation: variable non défini


Sujet :

Langage Perl

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 27
    Points : 12
    Points
    12
    Par défaut erreur compilation: variable non défini
    Slut,
    j'ai une fonction InRdvDtata qui me dit que je n'ai pas initialisé $df[0] (on le constate en faisant un print comme fait ci-dessous. Cependant, la variable analogue $dd[0] marche bien! on dirait que le premier tableau en paramètre masque le second. Quelqu'un pourrait il m'aider à faire fonctionner ce bout de code?
    je veux récupérer avec les deux dernières instruction la date sous la forme 8-13-2015 et 15-13-2015.

    Merci d'avance!

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    sub InRdvData {
        my ($mytxt, @dd, @df, $lieu) = @_;
        # Insert here the implementation
    	print ("mon text= $mytxt\t toto= $df[0]\t titi= $dd[1]\n");
    	my $d=$dd[0]."-".$dd[1]."-".$dd[2];
    	my $f=$df[0]."-".$df[1]."-".$df[2];
    }
    InRdvData("bidule", (8, 13, 2015), (15, 13, 2015), "Bureau");

  2. #2
    Responsable Perl et Outils

    Avatar de djibril
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    19 820
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 19 820
    Points : 498 771
    Points
    498 771
    Par défaut
    Si tu souhaites récupérer des tableaux dans tes procédures, tu dois passer des références de tableau et non le tableau.
    Dans ton code suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    sub InRdvData {
        my ($mytxt, @dd, @df, $lieu) = @_;
        # Insert here the implementation
    	print ("mon text= $mytxt\t toto= $df[0]\t titi= $dd[1]\n");
    	my $d=$dd[0]."-".$dd[1]."-".$dd[2];
    	my $f=$df[0]."-".$df[1]."-".$df[2];
    }
    InRdvData("bidule", (8, 13, 2015), (15, 13, 2015), "Bureau");
    $mytxt contiendra "bidule" et @dd contiendra (8, 13, 2015), (15, 13, 2015), "Bureau" d'où ton message comme quoi @df et $lieu non initialisées.

  3. #3
    Expert confirmé

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2009
    Messages
    3 577
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2009
    Messages : 3 577
    Points : 5 753
    Points
    5 753
    Par défaut
    J'ai donné une explication détaillée ici...

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 27
    Points : 12
    Points
    12
    Par défaut récupérer tableau dans une procédure
    Salut,

    j'ai tenu compte de la remarque que tu as faite sur la récupération de tableau dans une procédure et j'ai modifié mon code comme ci-dessous, mais ça ne marche toujours pas. Pour en savoir plus, je me suis rendu sur le pointeur que tu as indiqué (référence), mais je ne suis pas sorti de l'auberge!!
    merci de me dire encore plus là dessus.


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    sub InRdvData {
         my ($mytxt,@dd,@df,$lieu) = @_;
    	 my $ref_dd = \@dd;
    	 my $ref_df = \@df;
        # Insert here the implementation
    		print ("mon text= $mytxt\t  tata =$date[1][0]\t monlieu= $lieu\n");
    		my $d=$$ref_dd[0]."-".$$ref_dd[1]."-".$$ref_dd[2]; print ("cette var vaut: $d\n");
    		my $f=$$ref_df[0]."-".$$ref_df[1]."-".$$ref_df[2]; print ("cette var vaut: $f\n");
    }
    InRdvData("bidule", [8, 13, 2015], [15, 13, 2015],"Bureau");

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 27
    Points : 12
    Points
    12
    Par défaut notation d'un tableau
    Y'a t-il une différence entre (8, 13, 2015) et [8, 13, 2015] dans Perl?
    si oui, laquelle? ou bien est ce deux notations qui renvoient à la même chose?

    Merci

  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 27
    Points : 12
    Points
    12
    Par défaut notation tableau perl
    Merci djibril, philou m'a envoyé une solution détaillée sur la question et d'une pédagogie extravagante.

    Pour clôturer cette nouvelle discussion, je réitère ma question sur la question précédente en demandant s'il y a une différence entre (8, 13, 2015) et [8, 13, 2015] dans Perl?

    je le demande parce que quand je tente de changer [8, 13, 2015] en (8, 13, 2015) dans mon code perl, la solution avec les tableaux qui marchaient très bien avec [8, 13, 2015] ne marchent pas avec (8, 13, 2015).

    est ce la même syntaxe pour déclarer un tableau et que c'est juste une question de version perl supporté ou est ce deux choses différentes?

    merci.

  7. #7
    Expert confirmé

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2009
    Messages
    3 577
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2009
    Messages : 3 577
    Points : 5 753
    Points
    5 753
    Par défaut
    Citation Envoyé par ngouagme Voir le message
    Pour clôturer cette nouvelle discussion, je réitère ma question sur la question précédente en demandant s'il y a une différence entre (8, 13, 2015) et [8, 13, 2015] dans Perl?

    je le demande parce que quand je tente de changer [8, 13, 2015] en (8, 13, 2015) dans mon code perl, la solution avec les tableaux qui marchaient très bien avec [8, 13, 2015] ne marchent pas avec (8, 13, 2015).

    est ce la même syntaxe pour déclarer un tableau et que c'est juste une question de version perl supporté ou est ce deux choses différentes?
    Non, les deux notations correspondent à deux objets bien distincts :
    • (8, 13, 2015) représente une liste ou un tableau. Si tu souhaites le ranger dans une variable, elle doit être de type tableau, donc commençant par le sigil @ (comme @df, @dd).
    • [8, 13, 2015] représente une référence à un tableau anonyme (c'est à dire non rattaché à une variable). Cette référence est de type scalaire (une unique donnée), et doit être enregistrée dans une variable scalaire ($df, ou $dd). Pour accéder aux éléments du tableau anonyme, il faut alors déréférencer le scalaire.

    Différentes manières de déréférencer une référence à un tableau :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    @dd = @$dd;
    $dd_annee = $dd->[2];
    $dd_jour = ${$dd}[1];

  8. #8
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 27
    Points : 12
    Points
    12
    Par défaut référencement et déférencement résolu
    Merci Philou,
    ta remarque m'a permise de bien comprendre la doc sur le référencement et le déférencement.

  9. #9
    Expert confirmé

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2009
    Messages
    3 577
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2009
    Messages : 3 577
    Points : 5 753
    Points
    5 753
    Par défaut
    C'est d'autant mieux que les références, en perl, sont indispensable pour manipuler des structures de données complexes

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

Discussions similaires

  1. [AC-2007] Erreur de compilation: Variable non définie
    Par m1koo dans le forum VBA Access
    Réponses: 7
    Dernier message: 11/01/2014, 18h21
  2. [XL-2010] Erreur de compilation : variable non définie sur un textbox
    Par Bricomachin dans le forum Excel
    Réponses: 4
    Dernier message: 12/04/2013, 11h56
  3. [MySQL] Erreur sur variable non défini - défini
    Par BXDSPORT dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 27/07/2011, 15h38
  4. Erreur de compilation : Variable non définie
    Par Smallstone dans le forum VB 6 et antérieur
    Réponses: 8
    Dernier message: 12/07/2011, 08h32
  5. [AC-2003] Erreur de variable non définie
    Par piercleo dans le forum VBA Access
    Réponses: 1
    Dernier message: 12/01/2010, 16h02

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