Perl TK : problèmes passage arguments
Résolu/Fermé
JamieMacUloth
Messages postés
43
Date d'inscription
jeudi 16 février 2017
Statut
Membre
Dernière intervention
6 juin 2022
-
26 févr. 2017 à 14:07
[Dal] Messages postés 6203 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 29 janvier 2025 - 3 mars 2017 à 11:00
[Dal] Messages postés 6203 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 29 janvier 2025 - 3 mars 2017 à 11:00
A voir également:
- Perl TK : problèmes passage arguments
- Denon perl pro test - Accueil - Audio
- Pdf tk - Télécharger - PDF
- Disney hd tk - Forum Cinéma / Télé
- Active perl - Télécharger - Édition & Programmation
- Perl split ✓ - Forum Perl
1 réponse
[Dal]
Messages postés
6203
Date d'inscription
mercredi 15 septembre 2004
Statut
Contributeur
Dernière intervention
29 janvier 2025
1 099
Modifié par [Dal] le 2/03/2017 à 10:26
Modifié par [Dal] le 2/03/2017 à 10:26
Salut,
Le problème c'est que ton code comporte des incohérences, et je ne sais pas si c'est parce que tu as fait un code illustratif approximatif ou si c'est effectivement la cause de ton (tes) problème(s).
Tout d'abord, si ta variable est globale à ton script, tu n'as pas à la passer en paramètre d'une fonction.
Par ailleurs, en faisant :
à l'initialisation de ton objet Button (qui ne se fait qu'une fois), tu dis à Perl/Tk que tu veux, lorsque le bouton est pressé, appeler la fonction sub_checkCount() avec $compteurBouton, qui est évalué à cet instant, et vaut 0 puisque tu es au stade de l'initialisation.
Je ne pense pas que tu aies besoin d'un paramètre.
Si tu veux vraiment un paramètre (c'est probablement que tu n'as pas besoin d'une variable globale), dans ce cas, tu dois probablement passer une référence à la variable $compteurBouton lorsque tu crées ton bouton Perl/Tk, et non le contenu de la variable elle même, de la même façon que tu passes une référence à la fonction...
Tu ferais cela en faisant :
et dans ta fonction du récupères ton paramètre en déréférençant la référence passé, comme ceci :
Dal
N.B. : code non testé
Le problème c'est que ton code comporte des incohérences, et je ne sais pas si c'est parce que tu as fait un code illustratif approximatif ou si c'est effectivement la cause de ton (tes) problème(s).
Tout d'abord, si ta variable est globale à ton script, tu n'as pas à la passer en paramètre d'une fonction.
Par ailleurs, en faisant :
my $btn2 = $mw->Button(-text => "checkCount", -command => [\&sub_checkCount, $compteurBouton]);
à l'initialisation de ton objet Button (qui ne se fait qu'une fois), tu dis à Perl/Tk que tu veux, lorsque le bouton est pressé, appeler la fonction sub_checkCount() avec $compteurBouton, qui est évalué à cet instant, et vaut 0 puisque tu es au stade de l'initialisation.
Je ne pense pas que tu aies besoin d'un paramètre.
Si tu veux vraiment un paramètre (c'est probablement que tu n'as pas besoin d'une variable globale), dans ce cas, tu dois probablement passer une référence à la variable $compteurBouton lorsque tu crées ton bouton Perl/Tk, et non le contenu de la variable elle même, de la même façon que tu passes une référence à la fonction...
Tu ferais cela en faisant :
my $btn2 = $mw->Button(-text => "checkCount", -command => [\&sub_checkCount, \$compteurBouton]);
et dans ta fonction du récupères ton paramètre en déréférençant la référence passé, comme ceci :
my $p_compteurBouton = ${$_[0]}
Dal
N.B. : code non testé
2 mars 2017 à 10:36
Il faut que j'essaye de comprendre ce que ça veut dire "référencement/déréférencement". Je dois avouer que je ne comprends pas bien cette notion, même si ça résout mon bug. Je vais essayer d'étudier ça.
Merci en tt cas pour ton aide DAL
2 mars 2017 à 11:41
En Perl, une référence fonctionne un peu comme un pointeur en C.
Tu as un tutoriel officiel Perl dessus, assez accessible :
https://perldoc.perl.org/perlreftut
et la doc complète (probablement "trop" car assez complexe, il vaut mieux lire le tutoriel avant) :
https://perldoc.perl.org/perlref
Dal
3 mars 2017 à 10:13
https://formation-perl.fr/guide-perl-09.html
Modifié par [Dal] le 3/03/2017 à 11:01
Comme tu le vois le déréférencement se fait normalement avec
$$
.Cependant, dans le cas d'une référence contenue à un indice d'un tableau (par exemple pour le premier paramètre passé à une fonction), il nécessite pour une évaluation correcte soit :
- de mettre entre accolades la référence (comme proposé dans ma syntaxe), ainsi : , ou
- d'utiliser le raccourci de notation : qui est équivalent, et plus lisible pour certains
Ces deux façons de faire sont expliquées à https://perldoc.perl.org/perlreftut#Using-References ("Use Rule 1" et "Use Rule 2").
Sylvain utilise seulement la 2ème sur cette page, mais cela signifie la même chose.
Dal