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 :

Retourner une référence locale


Sujet :

Langage Perl

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Février 2009
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 5
    Points : 6
    Points
    6
    Par défaut Retourner une référence locale
    Salut,

    Je viens de me mettre à Perl, et je commence à assimiler l'utilisation des structures imbriquées via les références. Seulement, je rencontre parfois ce type d'exemple (retour d'une référence sur un hash) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    sub refhash { 
      return {'nom'=>'Charles', 'age'=>35};
    }
    Seulement, je me pose alors une question : le hash est créé à l'intérieur de la routine; à ce titre, l'emplacement mémoire où il a été stocké pourrait-il être corrompu plus loin dans le programme ? Est-ce une bonne méthode de programmation ?

    Et si jamais cette tournure était correcte, celle-ci l'est-elle également ? N'y a-t'il aucun risque à récupérer une telle référence ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    sub refhash {
      my %hash = ('nom'=>'Charles', 'age'=>35);
      return \%hash;
    }
    Merci d'avance !

  2. #2
    Membre du Club

    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 3
    Points : 62
    Points
    62
    Par défaut
    Ton code est correct : le hash sera créé à parti de la routine, mais Perl gère tout seul sa durée de vie et quand il faut le détruire. Il utilise pour ça un Garbage Collector (GC). Dans ton cas, il note que le hash est créé, et qu'il y a une référence dessus, qui est retournée. Donc il ne vas pas détruire le hash. Le hash sera détruit quand il n'y aura plus personne qui le référence (qui "pointe dessus").

    Note : tu peux enlever les guillements des clés de hash si il n'y a pas d'ambiguité, c'est plu joli :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    sub refhash { 
      return { nom => 'Charles',  age => 35 };
    }
    Ta deuxième tournure est également bonne, et non il n'y a aucun risque Perl gère tout ça pour toi.

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Février 2009
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 5
    Points : 6
    Points
    6
    Par défaut
    Merci beaucoup pour tes explications . C'est vrai qu'un GC ça simplifie bien la vie .

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

Discussions similaires

  1. [EJB3] [JSF] Problème d'injection d'une référence locale
    Par MattA184575 dans le forum Java EE
    Réponses: 5
    Dernier message: 27/01/2009, 18h46
  2. Retourner une référence sur un std::vector
    Par Rodrigue dans le forum C++
    Réponses: 12
    Dernier message: 13/10/2007, 16h30
  3. [Système] Retourner une référence
    Par CHUCKYCHUCK dans le forum Langage
    Réponses: 7
    Dernier message: 09/07/2007, 04h36
  4. Réponses: 7
    Dernier message: 19/03/2007, 19h24
  5. Réponses: 6
    Dernier message: 28/09/2005, 11h30

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