récuperation d'une variable issue d'une fonction
Bonjour,
J'ai un problème surement trivial pour vous mais que je n'arrive pas à résoudre. J'ai un problème de récupération de variable d'une fonction lorsque j'utilise Tk.
En effet, sans tK, cela se passe bien, avec le script ci-dessous, tout fonctionne.
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
|
#!/usr/bin/perl
use strict;
use warnings;
my $part1='ABC';
my $conc=&AJOUT($part1);
print "\n2eme ligne (demandee dans le main) : valeur de concatenation = $conc\n";
sub AJOUT
{
my $part2='DEF';
my $ajout=$_[0].$part2;
print "\n1ere ligne (demandee dans la fonction): valeur de concatenation = $ajout\n";
return $ajout;
} |
J'ai bien la ligne 1 qui s'écrit avant la ligne 2.
Par contre quand je passe en Tk, j'ai plusieurs problèmes. J'ai fait ce script afin qu'il ressemble à celui d'avant:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41
| #!/usr/bin/perl
use strict;
use warnings;
use Tk;
my $mw = MainWindow->new();
$mw->minsize (500,500);
my $intro = $mw->Label(-text => 'Ajout morceau de variable',
-relief => 'raised',
-background => 'yellow',)
->pack(-fill => 'x');
my $part1='ABC';
my $conc='';
$conc=&AJOUT($part1);
print "\n2eme ligne (demandee dans le main) : valeur de concatenation = $conc\n";
MainLoop;
sub AJOUT
{
my $part=$_[0];
my $entete_list=$mw->Label(-text=>'Que voulez vous ajouter?')->pack;
my $list = $mw->Listbox()->pack;
my $bouton_OK = $mw->Button(-text=> 'OK')->pack;
$list->insert('end','ABC','DEF','GHI');
$bouton_OK->configure(-command => sub {
my $ID=$list->curselection();
my $select=$list->get($ID);
my $ajout=$part.$select;
print "\n1ere ligne (demandee dans la fonction): valeur de concatenation = $ajout\n";
return "$ajout";
}
);
} |
Les problèmes sont :
- message d'erreur "Use of uninitialized value in concatenation (.) or string at line 20. Cette ligne correspond à l'écriture de la ligne 2. Problème sur la variable $conc, il n'arrive pas à récupérer la valeur issue de la fonction mais je ne comprends pas pourquoi.
- Il m'écrit d'abord la ligne 2 avant la ligne 1?? Je ne comprends donc pas pourquoi il execute tout ce qu'il ya dans le main avant de passer aux fonctions? Quel est l'intêret de faire des fonctions si il ne les execute qu'après?
Je dois faire un mauvais truc mais je ne vois pas.
Merci d'avance