Bonjour,
Je voudrai savoir s'il y a la possibilité de retourner deux variables avec une fonction sub sous perl. Exemple:
Merci.Code:return (@tab, $valeur);
Version imprimable
Bonjour,
Je voudrai savoir s'il y a la possibilité de retourner deux variables avec une fonction sub sous perl. Exemple:
Merci.Code: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.
@++
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: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: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: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:
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:
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: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" :lol: ).
Merci beaucoup. (J'ai appris quelque chose)
Djahny.