Voici le code:Pourquoi une erreur de syntaxe se produit-elle lorsque je passe un coderef à ce sous-programme Perl prototypé?
sub function($&) {
my $param1 = shift;
my $code = shift;
# do something with $param1 and $code
}
Si je tente de l'appeler comme ceci:
function("whatever") {
print "i'm inside the coderef\n";
}
Je reçois Not enough arguments for MyPackage::function at x.pl line 5, near ""whatever" { "
. Comment puis-je l'appeler sans avoir à ajouter sub
devant le bloc de code?
Pourquoi ça ne marche pas quand c'est le premier argument? – Geo
@Geo, cela peut fonctionner, mais vous devez être plus explicite: 'function (" whatever ", sub {print" Je suis dans le coderef \ n "});' La syntaxe 'name BLOCK EXPR' ne fonctionne que si le coderef vient en premier. – friedo
Seulement parce qu'il a été conçu de cette façon. Je pense que la raison principale pour l'autoriser en premier lieu était de permettre aux utilisateurs d'écrire des sous-routines qui peuvent être appelées comme des fonctions intégrées qui prennent un petit fragment de code comme map et grep, mais quelque chose de plus flexible pourrait vite devenir confus. – Sean