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 :

Accéder à un l'objet modifié et non celui initialisé


Sujet :

Langage Perl

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Janvier 2014
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2014
    Messages : 9
    Points : 5
    Points
    5
    Par défaut Accéder à un l'objet modifié et non celui initialisé
    Bonjour,

    Pour synthétiser mon problème, je ne vais pas faire du copie/coller de code mais poser un code simple.
    J'ai 3 fichiers, A.pm, B.pm C.pm.
    Dans A.pm j'ai une classe A avec un constructeur:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    package A;
    use strict;
    use warnings;
     
    sub new {
      my $proto = shift;
      my $class = ref($proto) || $proto;
      my $self  = {};
      $self->{NAME} = "Bob";
      bless ($self, $class);
      return $self;
    }
    Dans mon fichier B.pm, je fais:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    package B;
    use strict;
    use warnings;
    use A;
    our $MonObjetA = new A();
    Puis dans le même fichier, dans une subroutine je fais:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    sub mafonctionB {
     $MonObjetA->{NAME} = "Angel";
    }
    Dans le fichier C.pm dans une subroutine, je fais:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    package C;
     
    use strict;
    use warnings;
    use B;
     
    sub mafonctionC {
     print("Voici le nom de mon Objet".$B::MonObjetA->{NAME}."\n");
    }
    Dans mon main p.pl:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    use strict;
    use warnings;
    use B;
    use C;
     
    B::mafonctionB();
    C::mafonctionC();
    Résultats: Ma subroutine m'affiche Bob alors que j'aimerai afficher Angel.
    Comment faire s'il vous plaît?
    En fait je voudrais que "mafonctionC" sache que j'ai fais une mise à jour du nom dans "mafonctionB"
    sans appeler la méthode juste avant le print. Il faudrait peut-être passer par des références
    mais tout ce que j'ai testé a échoué.

  2. #2
    Rédacteur/Modérateur

    Avatar de Lolo78
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Mai 2012
    Messages
    3 612
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2012
    Messages : 3 612
    Points : 12 469
    Points
    12 469
    Billets dans le blog
    1
    Par défaut
    Bonjour,

    qu'est-ce qui te fait penser que la fonction mafonctionB est appelée avec ce code?

    EDIT: pas cool de changer ton post initial sans le signaler. mafonctionB n'était appelé nulle part quand j'ai répondu.

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Janvier 2014
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2014
    Messages : 9
    Points : 5
    Points
    5
    Par défaut
    Bonjour,

    J'avais oublié un bout du code. Je viens de le mettre à jour.

    EDIT: Désolé pour la maj.

  4. #4
    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 : 499 184
    Points
    499 184
    Par défaut
    Bonsoir,

    Merci de créer systématiquement un constructeur dans chaque classe. Merci de lire ce tutoriel : Perl et la programmation orientée objet.

  5. #5
    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
    Dans son exemple, je pense que koliko ne veut pas faire du module B une classe.

    Pourrais-tu compléter le print de ta fonction mafonctionC ainsi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    print("Voici le nom de mon Objet [".ref($B::MonObjetA)."] $B::MonObjetA->{NAME}."\n");
    et donner le résultat.
    Plus j'apprends, et plus je mesure mon ignorance (philou67430)
    Toute technologie suffisamment avancée est indiscernable d'un script Perl (Llama book)
    Partagez vos problèmes pour que l'on partage ensemble nos solutions : je ne réponds pas aux questions techniques par message privé
    Si c'est utile, say

Discussions similaires

  1. Objet en lecture/ non modifiable
    Par javaDev dans le forum API standards et tierces
    Réponses: 6
    Dernier message: 19/10/2009, 15h29
  2. Réponses: 2
    Dernier message: 01/02/2007, 17h50
  3. Retrouver les objets modifiés
    Par zooffy dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 19/12/2006, 11h42
  4. [Tomcat]Accéder au context via Ip et non LocalHost
    Par vdavid1982 dans le forum Tomcat et TomEE
    Réponses: 2
    Dernier message: 07/04/2006, 10h22
  5. Objet.evenement --> Erreur : Non implémenté
    Par Darkdaemons dans le forum Général JavaScript
    Réponses: 8
    Dernier message: 01/09/2005, 17h24

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