Bonjour,
J'aimerai savoir si comme en javascript il est possible de passer une fonction A en parametre d'une fonction B, afin d'appeler cette fonction A depuis la fonction B.
Bien entendu a chaque appel de A, B sera différente.
Merci
Version imprimable
Bonjour,
J'aimerai savoir si comme en javascript il est possible de passer une fonction A en parametre d'une fonction B, afin d'appeler cette fonction A depuis la fonction B.
Bien entendu a chaque appel de A, B sera différente.
Merci
t'as pas besoin de passer la fonction A en paramètre pour l'appeler dans B. Tu l'appelle et c bon
en faites c bon je crois j'ai trouvé ce que je voulais faire :
MerciCode:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 #!/usr/bin/perl -w sub plop { print "c cool.\n"; } sub youpi { my ($sub) = @_; &$sub; } print "début\n"; youpi("plop"); print "fin\n";
c'est vraiment pas propre ce que tu as écrit.
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 #!/usr/bin/perl -w use warnings; use strict; use Carp; sub plop { print "c cool.\n"; } sub youpi { plop(); } print "début\n"; youpi(); print "fin\n";
Djibril écoute ce qu'on te dit : la fonction "plop" n'est qu'un exemple, il veut passer des fonctions différentes à chaque appel de youpi() !!
Néanmoins il ne le fait pas de façon très propre, sur ce point tu as raison :
ceci appelle effectivement plop() si elle existe, mais cela fait appel aux références symboliques (soft reference), qui sont extrêmement difficile à déboguer, ne t'avertissent absolument pas si tu as fait une erreur dans le nom de la fonction et sont de toute façon interdite sous le pragma strict (que tu devrais toujours utiliser).Code:
1
2 my $sub = "plop"; &$sub();
La façon propre de faire cela c'est :
Ici j'utilise une vraie référence (hard reference), je serais averti si je fais une erreur dans le nom de la fonction, les performances sont meilleures, le système est plus robuste...Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 #!/usr/bin/perl -w use warnings; use strict; use Carp; sub plop { print "c cool.\n"; } sub youpi { my $sub = shift; $sub->(); } print "début\n"; youpi(\&plop); print "fin\n";
Par ailleurs Perl supporte les fonctions anonymes, donc tu peux faire ça :
Tu peux même rendre la syntaxe plus plaisante (comme pour map ou grep) avec un petit prototype :Code:youpi( sub { print "Ca marche !!" } );
Mais ce n'est pas forcément une très bonne idée..Code:
1
2
3
4
5
6 sub youpi (&) { my $sub = shift; $sub->(); } youpi { print "Ca marche !!" };
--
Jedaï
désolé pour le code pas très propre je débute en perl.
Merci pour vos réponses ce que je voulais faire marche nikel.