Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

passage de paramètres

2 réponses
Avatar
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=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"

2 réponses

Avatar
Paul Gaborit
À (at) Fri, 10 Oct 2008 11:37:55 +0200,
"kurtz_le_pirate" écrivait (wrote):
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 - <http://perso.enstimac.fr/~gaborit/&gt;
Perl en français - <http://perl.enstimac.fr/&gt;
Avatar
kurtz_le_pirate
Paul Gaborit wrote:
À (at) Fri, 10 Oct 2008 11:37:55 +0200,
"kurtz_le_pirate" écrivait (wrote):
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"