Bonjour,
Je voudrai savoir s'il y a la possibilité de retourner deux variables avec une fonction sub sous perl. Exemple:
Merci.
Code : Sélectionner tout - Visualiser dans une fenêtre à part return (@tab, $valeur);
Bonjour,
Je voudrai savoir s'il y a la possibilité de retourner deux variables avec une fonction sub sous perl. Exemple:
Merci.
Code : Sélectionner tout - Visualiser dans une fenêtre à part return (@tab, $valeur);
Hello
Non, il n'est pas possible de retourner 2 valeurs avec un return. Peut-être pourrais-tu retourner une table de hachage ou la clé serait ta scalaire et ta valeur, ton tableau.
@++
GLDavid
Consultez la FAQ Perl ainsi que mes cours de Perl.
N'oubliez pas les balises code :tagcode: ni le tag :resolu:
Je ne répond à aucune question technique par MP.
Pour être tout à fait exact, "return" accepte plusieurs paramètres. Ce qui fait que, sur le papier, la fonction peut retourner plusieurs variables (désolé de te contredire, GLDavid).
Dans le cas que tu énonces, cependant, il y a un soucis :Tu retournes une liste ET une variable. Or, la liste est "aplatie" lors du retour, ce qui fait que la fonction ne retourne pas deux valeurs, mais beaucoup plus : toute la liste, élément par élément, puis $valeur après tous les autres.
Code : Sélectionner tout - Visualiser dans une fenêtre à part return (@tab, $valeur);
Pour éviter cela, il est possible de remplacer la liste par une référence, ce qui fait que la fonction retourne bien deux valeurs, même si l'une d'entre elles en cache tout une liste :Une autre solution consiste à inverser scalaire et liste :
Code : Sélectionner tout - Visualiser dans une fenêtre à part return (\@tab, $valeur);Ainsi, dans la liste (aplatie) de toutes les valeurs retournées, la première (@liste_retournee[0]) correspond à $valeur, et toutes les autres à @tab.
Code : Sélectionner tout - Visualiser dans une fenêtre à part return ($valeur, @tab);
Il y a bien plus d'une façon de le faire![]()
Bonjour,
(je poursuis la discussion avec une toute petite question sur le meme sujet).
D'apres ce qui a ete dit precedemment, retourner deux scalaires ne poserait pas d'inconvenient ?
Toutefois, par la suite, puis je appeler ces deux scalaires de maniere independante ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 use strict; package Constructor; sub new { my $a= shift; my $b= shift; my $c= shift; ... return( $sca_1,$sca_2 ); }
Merci.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 my $sca_1 = Constructor->new($a,$b,$c); my $sca_2 = Constructor->new($a,$b,$c);
Djahny.
Bonjour,
Non, ton code ne fonctionne pas... Si tu veux récupérer les deux valeurs retournées par return, il faut faire comme ça :
Ou alors, peut être que je n'ai pas bien compris ta question...
Code : Sélectionner tout - Visualiser dans une fenêtre à part my ($sca_1, $sca_2) = Constructor->new($a,$b,$c);
Salut Woufeil,
Merci de m'avoir repondu.
Tu as bien compris ma question. C'etait, nous dirons, une simple question de Cours. Je debute en Perl, et je voulais m'assurer de ne pas faire une erreur, que j'aurai peut etre pas su resoudre par la suite ("mieux vaut prevenir que guerir").
Merci beaucoup. (J'ai appris quelque chose)
Djahny.
Partager