passage de paramètres

Le
kurtz_le_pirate
bonjour,

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ÞleteValeur(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"
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Paul Gaborit
Le #17481601
À (at) Fri, 10 Oct 2008 11:37:55 +0200,
"kurtz_le_pirate"
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ÞleteValeur(9,@tab);



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 - Perl en français -
kurtz_le_pirate
Le #17521551
Paul Gaborit wrote:
À (at) Fri, 10 Oct 2008 11:37:55 +0200,
"kurtz_le_pirate"
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ÞleteValeur(9,@tab);



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.




comme d'hab, tu réponds bien au dela des demandes.
merci :))


--
klp
"bug : probleme d'interface entre la chaise et le clavier"
Publicité
Poster une réponse
Anonyme