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 :

Fonction eval + affichage de variable.


Sujet :

Langage Perl

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2011
    Messages
    60
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2011
    Messages : 60
    Par défaut Fonction eval + affichage de variable.
    Bonjour,
    j'ai un fichier contenu dans une variable.
    Je traite cette variable afin d'obtenir la syntaxe d'un hash. Voila la variable:

    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
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
     '{
      run0000 => {
        Cdum => "2*Cload",
        Cload => "5.000000E-12",
        IBIAS => "1.000000E-05",
        L_N1 => "2.000000E-07",
        L_N3 => "2.000000E-07",
        L_N5 => "2.000000E-07",
        L_N7 => "2.000000E-07",
        L_P1 => "2.000000E-07",
        L_P10 => "2.000000E-07",
        L_P3 => "2.000000E-07",
        L_P6 => "2.000000E-07",
        L_P8 => "2.000000E-07",
        PSRR => "0.000000E+00",
        RLOAD => "1.000000E+07",
        W_N1 => "1.000000E-05",
        W_N3 => "1.000000E-05",
        W_N5 => "1.000000E-05",
        W_N7 => "1.000000E-05",
        W_P1 => "1.000000E-05",
        W_P3 => "1.000000E-05",
        W_P6 => "1.000000E-05",
        W_P8 => "1.000000E-05",
        a => "2.000000E+00",
        b => "3.000000E+00",
        c => "4.000000E+00",
        corner => "slow_ss",
        e => "5.000000E+00",
        f => "7.000000E+00",
        fin => "1.000000E+04",
        xxx2 => "1.000000E+00"
      },
      run0001 => {
        Cdum => "2*Cload",
        Cload => "5.000000E-12",
        IBIAS => "1.000000E-05",
        L_N1 => "2.000000E-07",
        L_N3 => "2.000000E-07",
        L_N5 => "2.000000E-07",
        L_N7 => "2.000000E-07",
        L_P1 => "2.000000E-07",
        L_P10 => "2.000000E-07",
        L_P3 => "2.000000E-07",
        L_P6 => "2.000000E-07",
        L_P8 => "2.000000E-07",
        PSRR => "0.000000E+00",
        RLOAD => "1.000000E+07",
        W_N1 => "1.000000E-05",
        W_N3 => "1.000000E-05",
      xxx2 => "1.000000E+00"
      },
      run0002 => {
        Cdum => "2*Cload",
        Cload => "5.000000E-12",
        IBIAS => "1.000000E-05",
        L_N1 => "2.000000E-07",
        L_N3 => "2.000000E-07",
        L_N5 => "2.000000E-07",
        L_N7 => "2.000000E-07",
        L_P1 => "2.000000E-07",
        L_P10 => "2.000000E-07",
        L_P3 => "2.000000E-07",
        L_P6 => "2.000000E-07",
        L_P8 => "2.000000E-07",
        PSRR => "0.000000E+00",
        RLOAD => "1.000000E+07",
        W_N1 => "1.000000E-05",
        W_N3 => "1.000000E-05",
        W_N5 => "1.000000E-05",
        W_N7 => "1.000000E-05",
        W_P1 => "1.000000E-05",
        W_P3 => "1.000000E-05",
        W_P6 => "1.000000E-05",
      xxx2 => "1.000000E+00"
      },
      run0003 => {
        Cdum => "2*Cload",
        Cload => "5.000000E-12",
        IBIAS => "1.000000E-05",
        L_N1 => "2.000000E-07",
        L_N3 => "2.000000E-07",
        L_N5 => "2.000000E-07",
        L_N7 => "2.000000E-07",
        L_P1 => "2.000000E-07",
        L_P10 => "2.000000E-07",
        L_P3 => "2.000000E-07",
        L_P6 => "2.000000E-07",
        L_P8 => "2.000000E-07",
        PSRR => "0.000000E+00",
        RLOAD => "1.000000E+07",
        W_N1 => "1.000000E-05",
        W_N3 => "1.000000E-05",
        W_N5 => "1.000000E-05",
        W_N7 => "1.000000E-05",
      vstep => "5.000000E-01",
        xxx2 => "1.000000E+00"
    }
    }';
    J'utilise alors la fonction eval afin d'acceder a certain element par la suite.
    Cela a l'aire de fonctionner mais lorsque je veux afficher un element alors j'ai une erreur.
    Voila ce que je fais :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    my $hashref;
        $hashref = eval($content);
        print $hashref->{run0001}{Cdum} ;
    et voila alors l'erreur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Can't use string ("{
      run0000 => {
        Cdum => "2*") as a HASH ref while "strict refs" in use at /home/mercoiro/AVEdev/avenue/bin/avp2auditor.pl line 331.
    En effectuant des recherches je crois avoir compris que ma variable n'est pas consideree comme un hash.
    Pourtant quand je fais le test dans un code a part en declarant directement un hash de cette forme, la requete permettant d'obtenir un parametre fonctionne.

    Voila, si quelqu'un pouvait m'aider je lui en serai tres reconnaissant.
    Merci d'avance

  2. #2
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2011
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Août 2011
    Messages : 35
    Par défaut
    c'est etrange, ton code marche chez moi.

    tu as bien?
    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
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    my $content= '{
      run0000 => {
        Cdum => "2*Cload",
        Cload => "5.000000E-12",
        IBIAS => "1.000000E-05",
        L_N1 => "2.000000E-07",
        L_N3 => "2.000000E-07",
        L_N5 => "2.000000E-07",
        L_N7 => "2.000000E-07",
        L_P1 => "2.000000E-07",
        L_P10 => "2.000000E-07",
        L_P3 => "2.000000E-07",
        L_P6 => "2.000000E-07",
        L_P8 => "2.000000E-07",
        PSRR => "0.000000E+00",
        RLOAD => "1.000000E+07",
        W_N1 => "1.000000E-05",
        W_N3 => "1.000000E-05",
        W_N5 => "1.000000E-05",
        W_N7 => "1.000000E-05",
        W_P1 => "1.000000E-05",
        W_P3 => "1.000000E-05",
        W_P6 => "1.000000E-05",
        W_P8 => "1.000000E-05",
        a => "2.000000E+00",
        b => "3.000000E+00",
        c => "4.000000E+00",
        corner => "slow_ss",
        e => "5.000000E+00",
        f => "7.000000E+00",
        fin => "1.000000E+04",
        xxx2 => "1.000000E+00"
      },
      run0001 => {
        Cdum => "2*Cload",
        Cload => "5.000000E-12",
        IBIAS => "1.000000E-05",
        L_N1 => "2.000000E-07",
        L_N3 => "2.000000E-07",
        L_N5 => "2.000000E-07",
        L_N7 => "2.000000E-07",
        L_P1 => "2.000000E-07",
        L_P10 => "2.000000E-07",
        L_P3 => "2.000000E-07",
        L_P6 => "2.000000E-07",
        L_P8 => "2.000000E-07",
        PSRR => "0.000000E+00",
        RLOAD => "1.000000E+07",
        W_N1 => "1.000000E-05",
        W_N3 => "1.000000E-05",
      xxx2 => "1.000000E+00"
      },
      run0002 => {
        Cdum => "2*Cload",
        Cload => "5.000000E-12",
        IBIAS => "1.000000E-05",
        L_N1 => "2.000000E-07",
        L_N3 => "2.000000E-07",
        L_N5 => "2.000000E-07",
        L_N7 => "2.000000E-07",
        L_P1 => "2.000000E-07",
        L_P10 => "2.000000E-07",
        L_P3 => "2.000000E-07",
        L_P6 => "2.000000E-07",
        L_P8 => "2.000000E-07",
        PSRR => "0.000000E+00",
        RLOAD => "1.000000E+07",
        W_N1 => "1.000000E-05",
        W_N3 => "1.000000E-05",
        W_N5 => "1.000000E-05",
        W_N7 => "1.000000E-05",
        W_P1 => "1.000000E-05",
        W_P3 => "1.000000E-05",
        W_P6 => "1.000000E-05",
      xxx2 => "1.000000E+00"
      },
      run0003 => {
        Cdum => "2*Cload",
        Cload => "5.000000E-12",
        IBIAS => "1.000000E-05",
        L_N1 => "2.000000E-07",
        L_N3 => "2.000000E-07",
        L_N5 => "2.000000E-07",
        L_N7 => "2.000000E-07",
        L_P1 => "2.000000E-07",
        L_P10 => "2.000000E-07",
        L_P3 => "2.000000E-07",
        L_P6 => "2.000000E-07",
        L_P8 => "2.000000E-07",
        PSRR => "0.000000E+00",
        RLOAD => "1.000000E+07",
        W_N1 => "1.000000E-05",
        W_N3 => "1.000000E-05",
        W_N5 => "1.000000E-05",
        W_N7 => "1.000000E-05",
      vstep => "5.000000E-01",
        xxx2 => "1.000000E+00"
    }
    }';



    Sinon pour verifier que tu as bien un certain type, tu as l'operateur: ref($content)
    Elle retourne:
    - SCALAR si tu as un scalaire
    - ARRAY si tu as un tableau
    - HASH si tu as un table de hachage
    - faux si scalaire classique

  3. #3
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2011
    Messages
    60
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2011
    Messages : 60
    Par défaut
    Oui j'ai bien cela. Et en le declarant de la maniere dont tu as du le faire chez toi cela marche.
    Mais le faite que je charge une fichier dans une variable, que j'effectue des transformations a cette variable afin de lui donner la syntaxe d'un hash me font croire que l'erreur doit venir de la.

    La requete ref ne me renvoie rien...

    Sinon mon erreur explique que ma variable $hashref n'a pas le bon type?
    Ce qui colerait avec le fait que ref ne renvoi rien

  4. #4
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2011
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Août 2011
    Messages : 35
    Par défaut
    Il doit voir ton $hashref comme un scalaire classique et non une reference vers un Hash (d'ou pas de retour par l'operateur ref).

  5. #5
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2011
    Messages
    60
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2011
    Messages : 60
    Par défaut
    Mais ce que je ne comprends pas , c'est que dans un programme seul a cote, cela marche tres bien, et ma variable est bien vu comme un hash...
    Je ne vois pas ce qu'il cloche dans mon projet..

  6. #6
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2011
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Août 2011
    Messages : 35
    Par défaut
    Il manque des elements pour pouvoir plus aider en details.

    C'est possible d'avoir le code complet?
    Initialisation du content, comment tu le modifie (le probleme vient surement de la), etc... ?

    Ce n'est pas en transformant un scalaire pour qu'il ait la synthaxe d'un Hash, qu'il en devient forcement un.

    De plus, les variables en perl peuvent changer de type.

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 12/01/2012, 12h24
  2. Appeler une variable globale dans la fonction eval
    Par Romanops dans le forum Langage
    Réponses: 2
    Dernier message: 03/08/2007, 04h24
  3. Modifier une zone de texte désigné par la fonction eval(concat de variables)
    Par Franck2mars dans le forum Général JavaScript
    Réponses: 8
    Dernier message: 19/07/2006, 11h43
  4. [String] équivalent de la fonction eval() en javascript
    Par jeyce dans le forum API standards et tierces
    Réponses: 5
    Dernier message: 01/09/2004, 08h42
  5. Fonction d'affichage
    Par Mynautor dans le forum OpenGL
    Réponses: 2
    Dernier message: 31/05/2004, 11h52

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