Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1431 connectés 

  FORUM HardWare.fr
  Programmation
  Perl

  fonction avec table hash en parametre

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

fonction avec table hash en parametre

n°1536355
donny3
Posté le 30-03-2007 à 12:40:08  profilanswer
 

salut,
 
Je souhaite faire une fonction qui prenne en parametre un tableau hash mais je ne sais pas comment le declarer dans ma fonction ??
je sais que je l'avais fait avec un array
et j'avais mis cela pour que ma fonction prennent en parametre le tableau

Code :
  1. my @montableau= @_;


 
mais pour le hash cela ne fonctionne pas
j'ai essayer  

Code :
  1. my %montableau= %_;


 
marche pas non plus
 
Est ce que vous auriez des idée
 
Merci

mood
Publicité
Posté le 30-03-2007 à 12:40:08  profilanswer
 

n°1536366
anapajari
s/travail/glanding on hfr/gs;
Posté le 30-03-2007 à 13:19:23  profilanswer
 

Apprendre les bases du perl parce que là c'est nawak [:spamafote]

 

Ta syntaxe pour récupérer un tableau n'est déjà pas correcte dans la mesure tu ne récupères pas un tableau mais tous les arguments de ta fonction. Par exemple avec l'appel suivant:

Code :
  1. test(@param1, $param2)


a la récupération dans ta sub @montableau contiendra un tableau avec tous les éléments de @param1 et $param2 en dernier élément.

 

Quand on veut passer des tableaux/hash à une sub, sauf cas super particulier, on passe leur référence et on utilise celle-ci dans la fonction:

Code :
  1. sub test {
  2.   my $hRef = shift;
  3.   foreach my $key ( keys %$hRef){
  4.      print 'key:', $key, ' value:', $hRef->{$key};
  5.   }
  6. }
  7. my %hash = ('A'=>'toto', 'B'=>'tata');
  8. test(\%hash);
 

Encore une fois je pense qu'un peu de lecture de la doc/d'un bouquin ne serait pas du temps de perdu.

Message cité 2 fois
Message édité par anapajari le 30-03-2007 à 13:20:00
n°1536378
Aricoh
gentil mais fo po pousser
Posté le 30-03-2007 à 13:45:59  profilanswer
 

anapajari a écrit :

Encore une fois je pense qu'un peu de lecture de la doc/d'un bouquin ne serait pas du temps de perdu.


+1  :sarcastic:  
 
Pour bosser via une fonction avec un hash qui lui est envoyé, comme toujours en Perl tu as plusieurs méthodes.
 
Soit une méthode simple sans références :
 

Code :
  1. use strict;
  2. my %toto = (1, "un", 2, "deux" );
  3. %toto = AjouteCleValeur(%toto);
  4. sub AjouteCleValeur
  5. {
  6.     my %pouet = @_;
  7.     $pouet{3} = "trois";
  8.     return %pouet;
  9. }


 
Soit par référence :
 

Code :
  1. use strict;
  2. my %toto = (1, "un", 2, "deux" );
  3. AjouteCleValeur(\%toto);
  4. sub AjouteCleValeur
  5. {
  6.     my ($hash) = shift();
  7.     $hash->{3} = "trois";
  8. }


 
Généralement, j'utilise la seconde méthode, plus souple lorsque l'on souhaite bosser directement dans le hash pour le modifier via la fonction appelée. Et aussi, parce que bien plus pratique lorsque la fonction reçoit scalaires, listes, hash de hash et autres bricoles plus ou moins amusantes  :D


Message édité par Aricoh le 30-03-2007 à 13:54:20

---------------
Samsung Galaxy S1 -> Samsung Galaxy S2 -> Samsung Note 2 -> Huawei Ascend Mate 7 -> ZTE Axon 7 -> OnePlus 6T -> Oppo Find X2 PRO -> Google Pixel 9 PRO XL
n°1536381
Aricoh
gentil mais fo po pousser
Posté le 30-03-2007 à 13:48:26  profilanswer
 

anapajari a écrit :

Apprendre les bases du perl parce que là c'est nawak [:spamafote]


 
Comme disait mon prof, y a certaines notions à savoir en Perl parmi lesquelles probablement la plus importante : connaître la notion de ce qu'est un scalaire, un tableau et un hachage.
 
Quand tu sais ça, c'est déjà pas mal  :)  

n°1536386
anapajari
s/travail/glanding on hfr/gs;
Posté le 30-03-2007 à 13:52:46  profilanswer
 

manque un my %pouet dans ta 1ere méthode ;)

Aricoh a écrit :

Comme disait mon prof, y a certaines notions à savoir en Perl parmi lesquelles probablement la plus importante : connaître la notion de ce qu'est un scalaire, un tableau et un hachage.
Quand tu sais ça, c'est déjà pas mal  :)


je suis 200% d'accord mais je rajouterais les références, sinon tu te retrouves à pas faire la différence entre ces 3 écritures:

Code :
  1. my $a = [1,2];
  2. my $b = {1,2};
  3. my $c = (1,2);

n°1536392
Aricoh
gentil mais fo po pousser
Posté le 30-03-2007 à 13:57:23  profilanswer
 

anapajari a écrit :

manque un my %pouet dans ta 1ere méthode ;)


J'ai corrigé la boulette  :D  
 

anapajari a écrit :

je suis 200% d'accord mais je rajouterais les références, sinon tu te retrouves à pas faire la différence entre ces 3 écritures:

Code :
  1. my $a = [1,2];
  2. my $b = {1,2};
  3. my $c = (1,2);



Certes certes  :whistle: mais en disant mon truc, je pensais à la notion "B.A-baesque" en Perl. Il y a bien entendu d'autres notions à savoir mais que notre bonhomme n'aura pas le temps d'apprendre apparemment (au fait donny3, tu sais maintenant à quoi servent les fonctions print, close et open ou toujours pas ?  :D )
 

n°1536463
donny3
Posté le 30-03-2007 à 15:49:16  profilanswer
 

les bases du perl je les connais Aricoh donc certaines reflexion vous pouvez les garder surtout le print;
ma question elle etait simple et j'ai eu la reponse c'etait cela

Citation :


my @montableau= @_;


 
pas besoin d'un debat la dessus;
on est pas censer tout savoir comme toi lol
à bonne entendeur
 
aricoh et anapajri vous etes un peu en contradiction
y'en a un qui me dit c'est possible avec cela

Citation :

my %pouet = @_;

et l'autre qui me donne un exemple dans lequel il utilise cela

Message cité 1 fois
Message édité par donny3 le 30-03-2007 à 16:41:18
n°1536480
anapajari
s/travail/glanding on hfr/gs;
Posté le 30-03-2007 à 16:40:27  profilanswer
 

donny3 a écrit :

les bases du perl je les connais Aricoh donc certaines reflexion vous pouvez


C'était pas méchant hein, mais je pense que non [:roane] ...
Et de toute façon au vu des questions que tu as posté dans la cat recemment, je vais encore insisté sur le fait qu'il te manque des bases pour comprendre ce que tu dois faire et pour le faire correctement et "proprement" ( même si en perl ça veut rien dire)
Perso, j'ai toujours sous la main:

  • la doc
  • les  O'Reilly suivant "Perl in a nutshell" et "Advanced Perl Programming", et un peu plus loin "Perl Cookbook"
  • et la cpan

Et bin tu y trouves 95% des réponses/solutions [:spamafote]

Message cité 1 fois
Message édité par anapajari le 30-03-2007 à 16:41:39
n°1536482
donny3
Posté le 30-03-2007 à 16:42:28  profilanswer
 

ces deux bouquins y coutent une fortune

Citation :


les deux O'Reilly "Perl in a nutshell" et "Advanced Perl Programming"
 

n°1536489
anapajari
s/travail/glanding on hfr/gs;
Posté le 30-03-2007 à 16:50:15  profilanswer
 
mood
Publicité
Posté le 30-03-2007 à 16:50:15  profilanswer
 

n°1536496
donny3
Posté le 30-03-2007 à 16:57:29  profilanswer
 

je l'ai fait comme cela et sa fonctionne

Code :
  1. my %tab;
  2. my  $chemin1="$home...";
  3. %tab=recuperation(chemin1,%tab);
  4. sub recuperation
  5. {
  6. my $chemin=shift;
  7. my %tableau=@_;
  8. open(FILE,"< $chemin" );
  9. while(my $info=<FILE> )
  10. {
  11. if (not($info =~ /^XX/))
  12.  {
  13.  (my $champ,my $val)=split(/=/,$info);
  14.  $champ=~s/\s*$//;
  15.  $val=~s/\s*$//;
  16.  $tableau{$champ}=$val;
  17.   }
  18. }
  19. close(FILE));
  20. return %tableau;
  21. };


Message édité par donny3 le 30-03-2007 à 16:58:01
n°1536521
Aricoh
gentil mais fo po pousser
Posté le 30-03-2007 à 18:37:19  profilanswer
 

anapajari a écrit :

C'était pas méchant hein, mais je pense que non [:roane] ...


C'était une boutade mais bon...  [:zeusy]  
 
Et sinon Donny3, cette doc GRATUITE là, tu connais ? http://perl.enstimac.fr/DocFr.html

n°1537088
donny3
Posté le 02-04-2007 à 08:27:45  profilanswer
 

j'avais vu le site
mais pas fait attention à la doc
je crois que je vais faire un tour dans les boutique de livre d'occaz
et je vais m'en prendre un bien;

n°1537094
anapajari
s/travail/glanding on hfr/gs;
Posté le 02-04-2007 à 09:10:13  profilanswer
 

Si tu dois n'en prendre qu'un, je te conseille vraiment "Advanced Perl Programming".


Message édité par anapajari le 02-04-2007 à 09:10:23
n°1537279
donny3
Posté le 02-04-2007 à 13:22:27  profilanswer
 
n°1537282
Aricoh
gentil mais fo po pousser
Posté le 02-04-2007 à 13:23:43  profilanswer
 
n°1537702
donny3
Posté le 03-04-2007 à 11:28:56  profilanswer
 

je viens de lire une doc sur les reference et en gros sa signifie que dans ma fonction j'utilise un tableau qui lui va pointé sur le vrai tableau;

Code :
  1. sub test { 
  2. my $hRef = shift; 
  3. foreach my $key ( keys %$hRef)
  4. {   
  5. print 'key:', $key, ' value:', $hRef->{$key}; 
  6. }
  7. }
  8. my %hash = ('A'=>'toto', 'B'=>'tata');
  9. test(\%hash);


 
 
en faite sa signifie que $hRef est le tableau qui va pointé sur %hash(tu créer une reference quand tu appel ton  hash dans la fonction $hRef = \%hash;
;
en faisant cette boucle foreach my $key ( keys %$hRef){  
tu dereference la reference donc $hRef et du coup cela va pointé sur %$hRef %hash et tu recupere les valeurs contenu dans %hash;


Message édité par donny3 le 03-04-2007 à 11:29:52
n°1537775
matafan
Posté le 03-04-2007 à 12:59:53  profilanswer
 

C'est ça en gros, sauf qu'une référence c'est un scalaire, pas un tableau.

 

Tu peux aussi faire (note bien les accolades à la place des parenthèses) :

my $hashref = {'A'=>'toto', 'B'=>'tata'};
test($hashref);


Message édité par matafan le 03-04-2007 à 13:01:10

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Perl

  fonction avec table hash en parametre

 

Sujets relatifs
Erreur d'accès ambigu à une fonction membre après dérivation multiplePassage d'une requête en paramètre
ASP.NET structure table datasetCombiner le résultat de deux requêtes sur une même table
[Java] Générer un hash MD5[Résolu] Pb modification structure table pr rajouter auto-increment
comment utiliser cette fonctiontable innodb
Fonction pour écrire un DWORD dans la base de registre avec VB6Problemme sur fonction [debutant]
Plus de sujets relatifs à : fonction avec table hash en parametre


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR