j'ai une fonction qui supprime une valeur dans un tableau :
sub deleteValeur {
my ($v,@t)=@_;
my @tmp;
for my $x (@t) {
push @tmp,$x if ($x != $v);
}
return @tmp;
}
que j'appele comme ça : @tab=deleteValeur(9,@tab);
ce que je voudrais, c'est faire directement :
deleteValeur(9,@tab);
sans être obligé de renvoyer le tableau mais travailler directement
dessus.
donc si je passe la référence du tableau par 'deleteValeur(9,\@tab)',
comment je la récupère dans le sub ?
merci
--
klp
"bug : probleme d'interface entre la chaise et le clavier"
Il existe une petite fonction Perl qui s'appelle grep et qui permet de
faire exactement ça (et bien plus) :
@tab = grep {$_ != 9} @tab;
> ce que je voudrais, c'est faire directement :
> deleteValeur(9,@tab);
> sans être obligé de renvoyer le tableau mais travailler directement
> dessus.
>
> donc si je passe la référence du tableau par 'deleteValeur(9,\@tab)',
> comment je la récupère dans le sub ?
> merci
Par référence, c'est très simple :
sub deleteValeurByRef {
my ($v, $ref_tab)=@_;
@{$ref_tab} = grep {$_ != $v} @{$ref_tab};
}
qui s'appelle par :
deleteValeurByRef(9, \@tab);
On peut aussi utiliser les prototypes de fonctions :
sub deleteValeurInPlace($\@) {
my ($v, $ref_tab)=@_;
@{$ref_tab} = grep {$_ != $v} @{$ref_tab};
}
qui s'appelle par :
deleteValeurInPlace(9, @tab);
Les prototypes ne fonctionnent pas pour les méthodes.
--
Paul Gaborit - <http://perso.enstimac.fr/~gaborit/>
Perl en français - <http://perl.enstimac.fr/>
comme d'hab, tu réponds bien au dela des demandes.
merci :))