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 :

Probleme avec une fonction prenant des references en parametre et une boucle !


Sujet :

Langage Perl

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Juillet 2009
    Messages
    176
    Détails du profil
    Informations personnelles :
    Âge : 37

    Informations forums :
    Inscription : Juillet 2009
    Messages : 176
    Par défaut Probleme avec une fonction prenant des references en parametre et une boucle !
    Bonjour,
    Comme cela fait longtemps que je tourne en rond je me suis enfin decidee a m'inscrire et poster sur ce site qui m'a deje beaucoup aide.
    Alors voila,
    J'ai des references $P1 ... $P5 qui sont en fait des tableaux a deux dimensions.
    Et une fonction neighbour qui prend 2 de ces tableaux en parametres.

    Quand je tape ca :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    my $isngb=neighbour($P1,$P2);
    print"$isngb \n";
    tout va bien ! Il me retourne bien 0 qui est le resultat attendu pour ces 2 parametres.

    Mais voila, je voudrais faire une boucle :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    for (my $i=1;$i<=5;$i++)
    {
            for (my $j=$i+1;$j<=5;$j++)
            {
    Pour calculer tous mes neighbour... Et la c'est le drame !
    J'ai d'abord fait :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    for (my $i=1;$i<=5;$i++)
    {
            for (my $j=$i+1;$j<=5;$j++)
            {
               my $isngb=neighbour("\$P$i","\$P$j");
    mais il en voulait pas...
    alors j'ai voulu prendre un chemin detourne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    my $temp='$P'."$i";
    print "$temp \n";
    J'ai verifie il me met bien $P1 $P2 ...

    mais quand je le passe en parametre de neighbour dans la boucle
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    my $isngb=neighbour("$temp",$P2);
    J'ai toujours le meme message d'erreur :
    Can't use string ("$P1") as an ARRAY ref while "strict refs" in use at ./polygontest.pl line 26.
    Donc je ne sais plus trop quoi faire...
    Je debute tout juste avec Perl (je viens de finir de lire l'introduction mise sur ce forum) donc il se peut que j'ai fait une erreur tout bete mais je la vois pas

    Des idees pour m'aider ?

    ps : desolee pour le manque d'accent..(clavier qwerty)

  2. #2
    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
    Ce que tu souhaites faire, c'est utiliser des symboles dynamiques, c'est à dire construire le nom de tes symboles dynamiquement, ce qui n'est pas recommandé, voire même interdit lorsque tu utilises "use strict" (comme tu devrais le faire).
    Pour cela, il faudrait alors écrire tes références ainsi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    for (my $i=1;$i<=5;$i++)
    {
            for (my $j=$i+1;$j<=5;$j++)
            {
               my $isngb=neighbour(${P$i}, ${P$j});
    Cependant, je te conseille une solution plus élégante : construit un tableau contenant tes références :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    my @P = ($P1, $P2, $P3, $P4, $P5);
    for (my $i=1;$i<=5;$i++)
    {
            for (my $j=$i+1;$j<=5;$j++)
            {
               my $isngb=neighbour($P[$i],$P[$j]);

  3. #3
    Membre confirmé
    Inscrit en
    Juillet 2009
    Messages
    176
    Détails du profil
    Informations personnelles :
    Âge : 37

    Informations forums :
    Inscription : Juillet 2009
    Messages : 176
    Par défaut
    Merci beaucoup de m'avoir repondu
    Malheureusement, comme tout bon programme informatique, il ne fait pas ce que je veux malgres ton aide ( mais comme dirait mon prof : mais le pire c'est qu'il fait exactement ce qu'on lui dit ! Mais on a pas du lui dire ce qu'on voulait faire...)

    D'abord, je te rassure, j'utilise bien use strict. Autant essayer d'ecrire proprement.

    J'aimais bien ta premiere idee !
    Mais quand je l'ai essayee il a l'air de considerer que P est une methode...
    Can't call method "P" without a package or object reference at ./polygontest.pl line 152.
    Quand a la deuxieme..erreur egalement mais je crois que je vais devoir detailler plus mon programme pour essayer de comprendre ce qui cloche.

    Donc..J'explique tout.. J'espere que la longueur de l'explication ne te disuadera pas de m'aider..

    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
      1 #! /usr/bin/perl -W
      2 package Polygon;
      3 use strict;
      4 
      5 #####Data
      6 use Exporter;
      7 our @ISA=qw(Exporter);
      8 our @EXPORT=qw($P1 $P2 $P3 $P4 $P5 $poly1 $poly2 $poly3 $poly4 $poly5);
      9 
     10 our $P1=[ [0,3],[1,4],[3,0],[1,-2],[-1,-1],[-3,0],[-2,1],[-3,2] ];
     11 our $P2=[ [-3,2],[-4,-2],[-4,7],[-5,-6],[-6,3],[-7,0],[-8,-4],[-10,4],[-12,7],[-14,-3],[-14,1],[-19,5] ];
     12 our $P3=[ [-7,1],[-8,4],[-9,-2],[-9,2],[-10,0],[-12,-2],[-11,3],[-13,1] ];
     13 our $P4=[ [-5,-4],[0,-7],[4,-4],[5,-2],[6,-8],[6,-5],[7,-2],[8,-4] ];
     14 our $P5=[ [6,-3],[6,8],[8,4],[12,6],[13,1],[14,10] ];
     15 our @Pp = ($P1, $P2, $P3, $P4, $P5);
     16 ####
    Ca c'est les donnes sur lesquelles je travaille (J'y ai rajoute ton tableau)
    Les tableaux sont en fait des tableaux de points dans un plan et les Pi representent des polygones.

    Ma premiere fonction cherche pour un polygone donne, le xmin,xmax,ymin,ymax.
    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
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
     rectangle($P1);
     22 
     23 sub rectangle
     24 {
     25 my ($P)=@_;
     26 
     27 my $xmin=$P->[0][0];
     28 my $xmax=$P->[0][0];
     29 my $ymin=$P->[0][1];
     30 my $ymax=$P->[0][1];
     31 
     32 #print "$xmin $xmax $ymin $ymax\n";
     33 my $taille=@$P;
     34 #print "$taille\n";
     35 for (my $i=1;$i<$taille;$i ++)
     36 {
     37 #       for (my $j=0;$j<=1;$j++)
     38 #       {
     39 #       print " $P->[$i][$j]\n";
     40         if ( $P->[$i][0] > $xmax )
     41                 { $xmax=$P->[$i][0];}
     42         if ( $P->[$i][0] < $xmin )
     43                 { $xmin=$P->[$i][0];}
     44         if ( $P->[$i][1] > $ymax )
     45               { $ymax=$P->[$i][1];}
     46         if ( $P->[$i][1] < $ymin )
     47                 { $ymin=$P->[$i][1];}
     48 #       }
     49 }
     50 #print" $xmin,$ymin,$xmax,$ymax \n";
     51 my $rectangle ={
     52                 xmin => $xmin,
     53                 ymin=> $ymin,
     54                 xmax=>$xmax,
     55                 ymax=>$ymax
     56 };
     57 return $rectangle;
     58 
     59 }
    Voila pour la premiere fonction.
    La deuxieme prend deux polygones et determine si ils sont voisins (c'est a dire si ils se touchent ou ont une aire commune. Je verifie aussi si l'un ne serait pas inclu dans l'autre)
    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
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
     60 
     61 sub neighbour 
     62 {
     63 
     64 my ($Pol1)=shift;
     65 my ($Pol2)=shift;
     66 
     67 my $rect1=rectangle($Pol1);
     68 my $rect2=rectangle($Pol2);
     69 
     70 #Test if Pol1 include in Pol2 
     71 if ($rect1->{xmin}>=$rect2->{xmin} && $rect1->{xmax}<=$rect2->{xmax} &&
     72 $rect1->{ymin}>=$rect2->{ymin} && $rect1->{ymax}<=$rect2->{ymax})
     73         {return "Include";}
     74 #Test if Pol2 include in Pol1 
     75 elsif ($rect2->{xmin}>=$rect1->{xmin} && $rect2->{xmax}<=$rect1->{xmax} &&
     76 $rect2->{ymin}>=$rect1->{ymin} && $rect2->{ymax}<=$rect1->{ymax})
     77         {return "Contain";}
     78 #Test if the point (xmin,ymin) of Pol1 is in Pol2
     79 elsif ($rect1->{xmin}<=$rect2->{xmax} && $rect1->{xmin}>=$rect2->{xmin} &&
     80 $rect1->{ymin}<=$rect2->{ymax} && $rect1->{ymin}>=$rect2->{ymax})
     81         {return 1;}
     82 #Test if the point (xmin,ymax) of Pol1 is in Pol2
     83 elsif ($rect1->{xmin}<=$rect2->{xmax} && $rect1->{xmin}>=$rect2->{xmin} &&
     84 $rect1->{ymax}<=$rect2->{ymax} && $rect1->{ymax}>=$rect2->{ymax})
     85         {return 1;}
     86 #Test if the point (xmax,ymax) of Pol1 is in Pol2
     87 elsif ($rect1->{xmax}<=$rect2->{xmax} && $rect1->{xmax}>=$rect2->{xmin} &&
     88 $rect1->{ymax}<=$rect2->{ymax} && $rect1->{ymax}>=$rect2->{ymax})
     89         {return 1;}
     90 #Test if the point (xmax,ymin) of Pol1 is in Pol2
     91 elsif ($rect1->{xmax}<=$rect2->{xmax} && $rect1->{xmax}>=$rect2->{xmin} &&
     92 $rect1->{ymin}<=$rect2->{ymax} && $rect1->{ymin}>=$rect2->{ymax})
     93         {return 1;}
     94 else {return 0;}
     95 }
     96 
     97 
     98 ####
    Le but etant de creer une classe polygone contenant : le tableau de ses points, le rectangle qui le contient, et les polygones qui lui sont voisins :
    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
    100 sub new 
    101 {
    102         my $class = shift;
    103         my $points = shift;
    104         my $rect = shift;
    105         my $nghbr =[] ;
    106 #neighbours 
    107         my $self = {
    108                 points => $points,
    109                 rect => $rect,
    110                 nghbr => $nghbr
    111         };
    112 
    113         bless ($self,$class);
    114         return $self;
    115 
    116 
    117 }
    ...Tout ca pour parler du bout de code qui nous interesse !
    En fait, je voudrais tout simplement remplir mon tableau nghbr pour chaque polygone...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    129 our $poly1 = new Polygon($P1,rectangle($P1));
    130 our $poly2 = new Polygon($P2,rectangle($P2));
    131 our $poly3 = new Polygon($P3,rectangle($P3));
    132 our $poly4 = new Polygon($P4,rectangle($P4));
    133 our $poly5 = new Polygon($P5,rectangle($P5));
    Et viens ensuite la boucle dont je te parlais suivie d'un bout de code que j'ai mis en commentaire car j'ai quasiment le meme probleme...
    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
    27
    28
    29
    30
    31
    136 my $test=neighbour($P1,$P2);
    137 print"$test\n";
    138 #print"$poly1->{nghbr}\n";
    139 #push(@{$poly1->{nghbr}},"P2");
    140 
    141 for (my $i=1;$i<=5;$i++)
    142 {
    143         for (my $j=$i+1;$j<=5;$j++)
    144         {
    145 #my $temp='$P'."$i";
    146 #print "$temp \n";
    147 
    148 #   my $isngb=neighbour($P1,$P2);
    149 #print"$isngb \n";
    150 
    151 # my $isngb=neighbour("$temp",$P2);
    152 
    153 
    154         my $isngb=neighbour($Pp[$i],$Pp[$j]);
    155         print"$i $j \n";
    156         print"$isngb \n";
    157 
    158 #        if ($isngb==1)
    159 #
    160 #                {
    161 #                push(@{$poly2->{nghbr}},"P2");
    162 #                push(@{$poly$j->{nghbr}},"P$i");
    163 #                }
    164         }
    165 }
    166 1;
    Voila on est arrive au bout

    Bref tout ca pour dire que quand j'essaie le coup du tableau, il me met des erreurs du cote de la fonction neighbour, des le premier "if" :
    Contain
    0
    0
    Use of uninitialized value in numeric ge (>=) at ./polygontest.pl line 71.
    Use of uninitialized value in numeric ge (>=) at ./polygontest.pl line 71.
    Use of uninitialized value in numeric le (<=) at ./polygontest.pl line 71.
    Use of uninitialized value in numeric lt (<) at ./polygontest.pl line 71.
    Use of uninitialized value in numeric gt (>) at ./polygontest.pl line 71.
    Use of uninitialized value in numeric lt (<) at ./polygontest.pl line 71.
    Use of uninitialized value in numeric gt (>) at ./polygontest.pl line 71.
    Use of uninitialized value in numeric lt (<) at ./polygontest.pl line 71.
    Use of uninitialized value in numeric gt (>) at ./polygontest.pl line 71.
    Use of uninitialized value in numeric lt (<) at ./polygontest.pl line 71.
    Use of uninitialized value in numeric gt (>) at ./polygontest.pl line 71.
    0
    0
    0
    Use of uninitialized value in numeric ge (>=) at ./polygontest.pl line 71.
    Use of uninitialized value in numeric ge (>=) at ./polygontest.pl line 71.
    ...
    Voila voila... Ce qui me parait bizarre c'est qu'il a l'air de bien vouloir passer certain polygone puisqu'il affiche 0 parfois... Mais pour d'autre non. En attendant une reponse je vais essayer de voir manuellement ou ca bloque exactement... Mais j'ai l'impression que c'est a force de concatener des reference tableau...Je vais me perdre en cours de route !
    Donc a tres bientot dans la journee j'espere

    Edit : Et en plus je n'avais pas fait attention mais du coup les resultats sont faut : my $test=neighbour($P1,$P2); donne 1 et non pas Contain et de meme pour les autres, il devrait y avoir des 1 alors qu'il n'y a que des 0...

  4. #4
    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
    Sans les numéros de ligne, c'est difficile, mais visiblement, certains rectangles sont "vides" de données, ou manquent de coordonnées.
    Il faudrait que tu affiches le contenu des paramètres de neighbour($P[$i],$P[$j]) avant son appel, de cette manière par exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    use Data::Dumper;
     
    ...
     
    for (my $i=1;$i<=5;$i++)
    {
        for (my $j=$i+1;$j<=5;$j++)
        {
            print "neighbour called with i=$i, j=$j:\n", Data::Dumper->Dump([$P[$i], $P[$j]], [qw(*P$i *P$j)]);
            my $isngb=neighbour($P[$i],$P[$j]);
           print"$isngb \n";
    ...

  5. #5
    Membre confirmé
    Inscrit en
    Juillet 2009
    Messages
    176
    Détails du profil
    Informations personnelles :
    Âge : 37

    Informations forums :
    Inscription : Juillet 2009
    Messages : 176
    Par défaut
    Ok. Je vais rajouter les numeros de ligne et ce que tu me demande et je reposte

  6. #6
    Membre confirmé
    Inscrit en
    Juillet 2009
    Messages
    176
    Détails du profil
    Informations personnelles :
    Âge : 37

    Informations forums :
    Inscription : Juillet 2009
    Messages : 176
    Par défaut
    Alors...Il y a beaucoup de chose... Je pense que je ne vais poster que le debut, le reste est du meme tonneau :
    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
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    0
    neighbour called with i=1, j=2:
    @P$i = (
             [
               -3,
               2
             ],
             [
               -4,
               -2
             ],
             [
               -4,
               7
             ],
             [
               -5,
               -6
             ],
             [
               -6,
               3
             ],
             [
               -7,
               0
             ],
             [
               -8,
               -4
             ],
             [
               -10,
               4
             ],
             [
               -12,
               7
             ],
             [
               -14,
               -3
             ],
             [
               -14,
               1
             ],
             [
               -19,
               5
             ]
           );
    @P$j = (
             [
               -7,
               1
             ],
             [
               -8,
               4
             ],
             [
               -9,
               -2
             ],
             [
               -9,
               2
             ],
             [
               -10,
               0
             ],
             [
               -12,
               -2
             ],
             [
               -11,
               3
             ],
             [
               -13,
               1
             ]
           );
    Contain
    neighbour called with i=1, j=3:
    @P$i = (
             [
               -3,
               2
             ],
             [
               -4,
               -2
             ],
             [
               -4,
               7
             ],
             [
               -5,
                    -6
             ],
             [
               -6,
               3
             ],
             [
               -7,
               0
             ],
             [
               -8,
               -4
             ],
             [
               -10,
               4
             ],
             [
               -12,
               7
             ],
             [
               -14,
               -3
             ],
             [
               -14,
               1
             ],
             [
               -19,
               5
             ]
           );
    @P$j = (
    ...
    Edit : D'apres ce que je comprend, les indices sont un peu decales... Le 1er correspond en fait au deuxieme et ainsi de suite... Et donc forcement a l'indice on a :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    neighbour called with i=1, j=5:
    ...
    $P$j = undef;
    0
    neighbour called with i=2, j=3:
    Mais par contre je ne comprend pas pourquoi c'est decale ni pourquoi il s'arrete a i=4 :
    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
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    0 
    neighbour called with i=4, j=5:
    @P$i = (
             [
               6,
               -3
             ],
             [
               6,
               8
             ],
             [
               8,
               4
             ],
             [
               12,
               6
             ],
             [
               13,
               1
             ],
             [
               14,
               10
             ]
           );
    $P$j = undef;
    Use of uninitialized value in numeric ge (>=) at ./polygontest.pl line 71.
    Use of uninitialized value in numeric le (<=) at ./polygontest.pl line 71.
    Use of uninitialized value in numeric ge (>=) at ./polygontest.pl line 71.
    Use of uninitialized value in numeric le (<=) at ./polygontest.pl line 71.
    Use of uninitialized value in numeric le (<=) at ./polygontest.pl line 71.
    Use of uninitialized value in numeric le (<=) at ./polygontest.pl line 71.
    Use of uninitialized value in numeric le (<=) at ./polygontest.pl line 71.
    0 
    [root@satm-dev1-satm1 sonia]# ./polygontest.pl > test.txt

  7. #7
    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
    En ajoutant les traces que je te demande, tu trouveras facilement les données qui sont incorrectes, ce qui t'aidera à trouver où se trouve le bug...

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

Discussions similaires

  1. Réponses: 17
    Dernier message: 16/07/2012, 14h10
  2. Réponses: 1
    Dernier message: 27/03/2012, 17h14
  3. Renommer une fonction dans un select ou concevoir autrement une fonction
    Par tavarlindar dans le forum Général JavaScript
    Réponses: 16
    Dernier message: 30/05/2008, 17h17
  4. mettre des tableaux en parametre d'une fonction
    Par vbeno dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 22/01/2008, 03h14
  5. [C#] Passer des contrôles comme parametre dans une fonction
    Par sara21 dans le forum Windows Forms
    Réponses: 1
    Dernier message: 20/09/2006, 13h05

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