passer un tableau en parametre dans un sub?

passer un tableau en parametre dans un sub? - Perl - Programmation

Marsh Posté le 13-11-2006 à 15:22:11    

salut,
 
J'aurai savoir si quelqu'un serait comment faire pour passer un tableau hash en parametre dans une sub routine ??
j'ai essayer : %tab = @_ mais se ne fonctionne pas.
 
ex :
sub test {
var1 = shift;
ici je veux appeler un tableau hash
...
}
 
 
Merci.

Reply

Marsh Posté le 13-11-2006 à 15:22:11   

Reply

Marsh Posté le 13-11-2006 à 15:47:42    

il faut que tu passes une référence sur ta hash!

Code :
  1. my %hash = ('A'=>1, 'B'=>2, 'C'=>3);
  2. ...
  3. test(\\%hash);
  4. ...
  5. sub test {
  6.   my $var1 = shift;
  7.   ...
  8. }


Attention quand tu as une reference sur un hash tu accèdes a tes élements différement:

Code :
  1. my $hashRef = {'A'=>1,'B'=>2,'C'=>3};
  2. #1ere façon pour l'element 1:
  3. print $hashRef->{'A'};
  4. #2eme façon
  5. print $$hashRef{'A'};


edit: c#n de forum qui bouffe les slashs :o


Message édité par anapajari le 13-11-2006 à 15:48:10
Reply

Marsh Posté le 13-11-2006 à 15:56:55    

et dans ma fonction sub
je declare comment mon hash ???
 
comment je lui dit que je vais le passer en parametre ?
pour var1 j'utilise shift et pour mon hash ?

Reply

Marsh Posté le 13-11-2006 à 16:06:05    

bin var1 c'est le premier paramètre que tu passes à ta fonction en l'occurence une référence sur ta hash [:w3c compliant]
C'est bien pour ça qu'ensuite je t'ai donné les deux lignes qui expliquent comment se servir d'une ref.
 
Bon aller un exemple qui ajoute 4 à toutes les valeurs d'une hash:

Code :
  1. use Data::Dumper;
  2. use strict;
  3. my %hash = ('A'=>1, 'B'=>2, 'C'=>3);
  4. add(4,\\%hash);
  5. print Dumper \\%hash;
  6. sub add {
  7.   my $inc = shift;
  8.   my $hr = shift;
  9.   foreach my $key ( keys %$hr){
  10.     $hr->{$key} += $inc;
  11.   }
  12. }


edit: grrr de \


Message édité par anapajari le 13-11-2006 à 16:07:14
Reply

Marsh Posté le 13-11-2006 à 16:16:33    

ok
j'ai fait la meme chose
 
mais il bloque à cette ligne, il me dit que j'ai une erreur de synthaxe

Citation :

if ( exists %$monhash{$nom} ) {

Reply

Marsh Posté le 13-11-2006 à 16:26:48    

je te conseille de (re)lire mon premier post où je t'explique comment acceder à un element d'une reference de hash.

Reply

Marsh Posté le 14-11-2006 à 00:29:18    

donny3, ta syntaxe marche aussi mais faut des parentheses autour de %$monhash. Mais bon la bonne facon de faire c'est $monhash->{$nom} comme anapajari a dit.

Reply

Marsh Posté le 14-11-2006 à 10:02:26    

matafan a écrit :

donny3, ta syntaxe marche aussi mais faut des parentheses autour de %$monhash. Mais bon la bonne facon de faire c'est $monhash->{$nom} comme anapajari a dit.


Euhh nan hein ( enfin j'ai jamais vu, ptêt que je me trompe mais j'y crois pas trop).
%$ c'est pour déréférencer ta hash entière, tu peux pas accèder à un element comme ça même en rajoutant des parenthèses.
La syntaxe qui se rapproche le plus de ce que tu dis ça serait:

Code :
  1. ${%$hashRef}{'cle'};


Mais perso je la trouve particulierement incompréhensible.

Reply

Marsh Posté le 14-11-2006 à 15:14:34    

Heu oui faux un $ en plus tu as raison.

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed