IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage Perl Discussion :

return


Sujet :

Langage Perl

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    98
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 98
    Par défaut return
    Bonjour,

    Je voudrai savoir s'il y a la possibilité de retourner deux variables avec une fonction sub sous perl. Exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    return (@tab, $valeur);
    Merci.

  2. #2
    Membre expérimenté
    Avatar de GLDavid
    Homme Profil pro
    Head of Service Delivery
    Inscrit en
    Janvier 2003
    Messages
    2 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Head of Service Delivery
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Janvier 2003
    Messages : 2 895
    Par défaut
    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.

  3. #3
    Membre Expert
    Avatar de 2Eurocents
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    2 177
    Détails du profil
    Informations personnelles :
    Âge : 55
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 2 177
    Par défaut
    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 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    return (@tab, $valeur);
    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.

    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 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    return (\@tab, $valeur);
    Une autre solution consiste à inverser scalaire et liste :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    return ($valeur, @tab);
    Ainsi, dans la liste (aplatie) de toutes les valeurs retournées, la première (@liste_retournee[0]) correspond à $valeur, et toutes les autres à @tab.

    Il y a bien plus d'une façon de le faire

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 26
    Par défaut return
    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 ?

    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 );
    	}
    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
     
    my $sca_1 = Constructor->new($a,$b,$c);
    my $sca_2 = Constructor->new($a,$b,$c);
    Merci.
    Djahny.

  5. #5
    Membre Expert
    Avatar de Woufeil
    Profil pro
    Étudiant
    Inscrit en
    Février 2006
    Messages
    1 076
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2006
    Messages : 1 076
    Par défaut
    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 :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    my ($sca_1, $sca_2) = Constructor->new($a,$b,$c);
    Ou alors, peut être que je n'ai pas bien compris ta question...

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 26
    Par défaut
    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.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [servlet][bean] return d'une variable
    Par LoLoSS dans le forum Servlets/JSP
    Réponses: 2
    Dernier message: 07/05/2004, 16h59
  2. [pl/pgSQL 7.2] Returns Opaque?
    Par Gruik dans le forum PostgreSQL
    Réponses: 1
    Dernier message: 18/10/2003, 16h50
  3. return ();exit() ;
    Par Zazeglu dans le forum C
    Réponses: 12
    Dernier message: 10/10/2003, 20h56
  4. [C#] Changer le focus avec la touche return
    Par sblanc74 dans le forum Windows Forms
    Réponses: 6
    Dernier message: 01/10/2003, 18h38
  5. return
    Par drKzs dans le forum C
    Réponses: 3
    Dernier message: 18/09/2003, 22h36

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo