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 :

Bout de hash en paramètres


Sujet :

Langage Perl

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Modérateur
    Avatar de ggnore
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    2 472
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 2 472
    Par défaut Bout de hash en paramètres
    Bonjour,

    j'essaie d'envoyer un morceau de hash dans une fonction sans succès :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    #!/usr/bin/perl
    use warnings;
    use strict;
     
    my %connstring = (
            poller =>       {
                            ip      =>      "xx.xx.xx.xx",
                            login   =>      "monlogin",
                            password=>      "xxx",
                            },
     
            radius =>       {
                            ip      =>      "xx.xx.xx.xx",
                            login   =>      "badlogin",
                            password=>      "badpassword",
                            },
    );
     
    sub recup_subhash {
            my %subhash = @_;
            printf ( "\nip:". $subhash{ip});
    }
     
    recup_subhash( @connstring{ 'poller' } );
    Mais ça ne veut pas :
    $ ./param_bout_hash.pl
    syntax error at ./param_bout_hash.pl line 27, near "%connstring{ "
    Execution of ./param_bout_hash.pl aborted due to compilation errors.
    Merci d'avance de me sortir de ce mauvais pas.
    Toutes les vertus des hommes se perdent dans l’intérêt comme les fleuves se perdent dans la mer.
    N'oubliez pas de consulter les FAQ Linux et les cours et tutoriels Linux

  2. #2
    Modérateur
    Avatar de ggnore
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    2 472
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 2 472
    Par défaut
    Et la solution (merci grab76):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    sub recup_subhash {
            my $subhash = shift;
            printf ( "\nip:". ${$subhash}->{ip});
    }
     
    recup_subhash( \$connstring{radius});
    Toutes les vertus des hommes se perdent dans l’intérêt comme les fleuves se perdent dans la mer.
    N'oubliez pas de consulter les FAQ Linux et les cours et tutoriels Linux

  3. #3
    Expert confirmé

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2009
    Messages
    3 577
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2009
    Messages : 3 577
    Par défaut
    Dans cette ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    recup_subhash( \$connstring{radius});
    Le \ n'est pas nécessaire, car $connstring{radius} est déjà une référence.

    Du coup dans cette ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    printf ( "\nip:". ${$subhash}->{ip});
    Le double déréférencement n'est plus nécessaire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    printf ( "\nip:". $subhash->{ip});
    L'autre solution, qui était la tienne à l'origine, c'est de passer le sous-hash et non sa référence. Dans ton code initial, seule la ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    recup_subhash( @connstring{ 'poller' } );
    contenait une erreur. Il fallait écrire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    recup_subhash( %{$connstring{ 'poller' }} );
    L'avantage de cette dernier solution (passage par valeur), est que ta fonction recup_subhash n'a aucun risque d'avoir d'effet de bord sur la variable $connstring, ce qui n'est pas le cas de la version avec réféfences.

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

Discussions similaires

  1. Passer un bout de code html en paramètre d'une fonction javascript
    Par yoshimitsu dans le forum Général JavaScript
    Réponses: 14
    Dernier message: 04/08/2011, 14h40
  2. Comment trier un Hash sur plusieurs paramètres ?
    Par Whaouu dans le forum Langage
    Réponses: 2
    Dernier message: 05/12/2008, 09h31
  3. [SQL server 2000] bout de requete passé en paramètre
    Par guignol dans le forum MS SQL Server
    Réponses: 5
    Dernier message: 10/08/2004, 17h45
  4. Tables de hash
    Par miss8 dans le forum C
    Réponses: 2
    Dernier message: 16/11/2002, 17h44
  5. Paramètre requete SQL (ADOQuery)
    Par GaL dans le forum C++Builder
    Réponses: 3
    Dernier message: 30/07/2002, 11h24

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