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 :

Passer en parametre une table et un hachage.


Sujet :

Langage Perl

  1. #1
    Membre habitué

    Homme Profil pro
    Statisticien
    Inscrit en
    Novembre 2010
    Messages
    122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Statisticien

    Informations forums :
    Inscription : Novembre 2010
    Messages : 122
    Points : 134
    Points
    134
    Par défaut Passer en parametre une table et un hachage.
    Bonjour,

    J'aimerais savoir s'il y a un moyen simple, c'est à dire sans devoir tester tous les paramètres, pour pouvoir récupérer des paramètres qui sont un mélange de données numériques (liste de coordonnées) et de valeurs sous forme de hachage. Comme Tk utilise pour créer un ligne avec plusieurs points.

    Ce qui suit ne marche évidemment pas, mais illustre bien ce que je cherche.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    #!/usr/bin/perl
    use warnings;
    use strict;
     
    sub test {
        my (@liste,%param)=@_;
        print "liste",@liste,"\n";
        print "param",%param,"\n";
    }
     
    test(0,1,2,3,-tag=>"essai",-width=>3);

  2. #2
    Responsable Perl et Outils

    Avatar de djibril
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    19 820
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 19 820
    Points : 498 771
    Points
    498 771
    Par défaut
    Tk ne mélange pas la prise d'arguments de la sorte car c'est impossible de différencier le nombre d'arguments provenant de la liste ou du hash sauf si on connait le nombre d'élément de liste à récupérer.
    Sinon tu peux jouer avec les références.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    #!/usr/bin/perl
    use warnings;
    use strict;
     
    sub test {
      my ( %param ) = @_;
      print "-liste : ", @{ $param{-liste} }, "\n";
      print "-tag : $param{-tag}\n";
      print "-width : $param{-width}\n";
    }
     
    test( -liste => [ 0, 1, 2, 3 ], -tag => "essai", -width => 3 );

  3. #3
    Membre habitué

    Homme Profil pro
    Statisticien
    Inscrit en
    Novembre 2010
    Messages
    122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Statisticien

    Informations forums :
    Inscription : Novembre 2010
    Messages : 122
    Points : 134
    Points
    134
    Par défaut
    Merci pour l'exemple, ça peut me dépanner, mais pour Tk, j'ai quand même l'impression qu'il mélange. Enfin, mélanger est un grand mot, on a pour créer une ligne dans canvas (man Tk::canvas)

    $canvas->createLine(x1, y1..., xn, yn, ?option, value, option, value, ...?)

    c'est à dire une suite (pair) de nombre, suivie de ?option, value que l'on peut écrire -option=>value. Si on mélange vraiment, c'est pas garanti :-)

  4. #4
    Responsable Perl et Outils

    Avatar de djibril
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    19 820
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 19 820
    Points : 498 771
    Points
    498 771
    Par défaut
    Je suis bien d'accord, mais dans ce cas, tk sait exactement les arguments qu'il attend. Si c'est la cas pour toi, alors écrit ta procédure ainsi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    sub test {
        my ($val1, $val2, $val3, $val4 ,%param)=@_;
        #...
    }

  5. #5
    Membre habitué

    Homme Profil pro
    Statisticien
    Inscrit en
    Novembre 2010
    Messages
    122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Statisticien

    Informations forums :
    Inscription : Novembre 2010
    Messages : 122
    Points : 134
    Points
    134
    Par défaut
    A non, dans

    $canvas->createLine(x1, y1..., xn, yn, ?option, value, option, value, ...?)

    Il y a bien x1, y1..., xn, yn , avec des petits points et l'indice "n", qui permet en effet de passer une série indéterminée de couple x,y. C'est utilisé pour des lignes brisées ou des courbes qui passent par plusieurs points.

    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
    #!/usr/bin/perl
    use warnings;
    use strict;
    use Tk;
    my  $mw=MainWindow->new;
    my $drawing=$mw->Scrolled(
            'Canvas',
            -width      => 800,
            -height     => 400,
            -confine    => 0,
            -background => "white"
        )->pack(-side => "left");
     
    $drawing->createLine(0,0,100,100, -fill=>"blue");
    $drawing->createLine(0,0,100,100,0,100,-smooth=>"True", -fill=>"blue");
     
    MainLoop;

  6. #6
    Responsable Perl et Outils

    Avatar de djibril
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    19 820
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 19 820
    Points : 498 771
    Points
    498 771
    Par défaut
    Ok, c'est vrai, mais dans ce cas, tu remarqueras qu'il y a une liste de coordonnées x et y, plus des options commençant par un tiret '-'. as toi d'élaboré un algorigthme. Voici un exemple de programme.

    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
    25
    26
    #!/usr/bin/perl
    use warnings;
    use strict;
    use Data::Dumper;
     
    test( 0, 1, 2, 3, -tag => "essai", -width => 3 );
     
    sub test {
      my @parameter = @_;
      my @param;
      my $index = 0;
      foreach my $option ( @parameter) {
        if ( $option =~ m{^-} ) {
          last;
        }
        else {
          push (@param, $option);
        }
        $index++;
      }
     
      my %hash = @parameter[$index..$#parameter];
     
      print "-liste : @param\n";
      print Dumper %hash;
    }
    -liste : 0 1 2 3
    $VAR1 = '-tag';
    $VAR2 = 'essai';
    $VAR3 = '-width';
    $VAR4 = 3;

  7. #7
    Membre habitué

    Homme Profil pro
    Statisticien
    Inscrit en
    Novembre 2010
    Messages
    122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Statisticien

    Informations forums :
    Inscription : Novembre 2010
    Messages : 122
    Points : 134
    Points
    134
    Par défaut
    Absolument, je me demandais si on pouvait se passer de ce test, sans trop y croire. Bon, je crois que je vais plutôt utiliser ta première version.

    Merci.

Discussions similaires

  1. [Doctrine] passer un parametre à une requete dql
    Par bedomon dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 30/09/2010, 17h39
  2. [FB3]Passer des parametres à une fonction php
    Par KamaFlex dans le forum Flex
    Réponses: 4
    Dernier message: 08/02/2010, 17h09
  3. Réponses: 3
    Dernier message: 03/09/2009, 10h54
  4. MDI - passer un parametre à une fenetre fille
    Par amine245 dans le forum MFC
    Réponses: 8
    Dernier message: 05/04/2006, 16h23
  5. [VB] Passer plusieurs parametres à une procedure stockée
    Par wolflinger dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 19/04/2005, 14h13

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