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 :

Référence en retour de fonction, à transformer en hash


Sujet :

Langage Perl

  1. #1
    Membre régulier Avatar de raoulchatigre
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    99
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Bas Rhin (Alsace)

    Informations forums :
    Inscription : Mars 2004
    Messages : 99
    Points : 87
    Points
    87
    Par défaut Référence en retour de fonction, à transformer en hash
    Salut à tous,
    Je me remet au PERL après 3 ans d'abstinance, et je cogne sur une broutille :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    my %Result;
    my $Result;
    while ($Result = $MysqRes->fetchrow_hashref()) {
        %Result = %$Result;
    }
    Si j'ai bien suivi, $Result contient la référence d'un hash, c'est dailleurs pour ca que %Result contient mon hash tant attendu.

    Mais bon dans cette histoire je suis obligé de déclarer un $Result pour ensuite l'abandonner. Je veux pas pinailler mais il doit bien y avoir une manière de faire plus court
    Après avoir potassé la doc, j'ai essayé ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    my %Result;
    while (%Result = %{$MysqRes->fetchrow_hashref()} ) {
        ...
    }
    Mais hélas cela ne marche pas...
    C'est bête hein ?

  2. #2
    Yux
    Yux est déconnecté
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    105
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2004
    Messages : 105
    Points : 74
    Points
    74
    Par défaut
    Salut,

    Je ne suis pas certain de comprendre ce que tu souhaites faire mais si tu veux que ta variable scalaire contienne une référence sur ton hachage, l'affectation devrait ressembler à ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    my %Result;
    my $Result = \%Result;
    En espérant que cela puisse t'aider...

  3. #3
    vic
    vic est déconnecté
    Membre confirmé

    Profil pro
    Inscrit en
    Août 2002
    Messages
    431
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2002
    Messages : 431
    Points : 498
    Points
    498
    Par défaut
    Tu n'est pas obligé de recopier la cible de la référence dans un hash, tu peux utiliser la référence directement.

    Ex.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $$Result{"clef"} = "valeur";
    Qui s'écrit aussi (plus clair au début)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ${$Result}{"clef"} = "valeur";

  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
    Ca s'écrit surtout :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $Result->{"clef"} = "valeur";
    Ce qui est la plus claire des écritures à mon goût (mais les goûts et les couleurs...).

    Par ailleurs, que veux tu dire par "ça ne marche pas" ? Qu'est-ce qui cloche ?

    --
    Jedaï

  5. #5
    Membre régulier Avatar de raoulchatigre
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    99
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Bas Rhin (Alsace)

    Informations forums :
    Inscription : Mars 2004
    Messages : 99
    Points : 87
    Points
    87
    Par défaut
    Oui bon je sais c'est du pinaillage mais...
    Prenons ce code (plus clair)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    my %HashResult;
    my $RefHashResult;
    while ($RefHashResult = $MysqRes->fetchrow_hashref()) {
        %HashResult = %$RefHashResult;
    }
    Ce qui me gène c'est de devoir déclarer
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    my %HashResult;
    my $RefHashResult;
    Tout ça pour ensuite faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    %HashResult = %$RefHashResult
    à chaque tour de boucle...
    j'ai bien compris qu'on peut se servir de $RefHashResult->{key} mais je prèfère le % )

    Je me suis dis : ca doit être possible de mettre la bonne affectation DANS la condition du while
    Sans déclarer une variable $HashRefResult
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    my %HashResult;
    while (%HashResult = %{$MysqRes->fetchrow_hashref()} ) {
        #et rien ici
        ...
    }
    Ce code ne fonctionne pas chez moi

Discussions similaires

  1. Passage par référence et retour de fonction
    Par mister3957 dans le forum Langage
    Réponses: 2
    Dernier message: 16/05/2015, 13h12
  2. Retour de fonction par référence?
    Par ternel dans le forum Langage
    Réponses: 27
    Dernier message: 10/05/2014, 18h17
  3. référence sur retour de fonction
    Par Yoxoman dans le forum Langage
    Réponses: 1
    Dernier message: 25/05/2010, 17h39
  4. Référence en retour de fonction
    Par Dani3L dans le forum Débuter
    Réponses: 12
    Dernier message: 18/07/2008, 04h07
  5. Référence en retour de fonction
    Par Dani3L dans le forum C++
    Réponses: 12
    Dernier message: 18/07/2008, 04h07

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