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:
Dans mon fichier B.pm, je fais:
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; }
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
5
6 package B; use strict; use warnings; use A; our $MonObjetA = new A();
Dans le fichier C.pm 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 mon main p.pl:
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"); }
Résultats: Ma subroutine m'affiche Bob alors que j'aimerai afficher Angel.
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();
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é.
Partager