Le style foo(a => 1, b => 2)
est la manière habituelle d'émuler des arguments nommés. Le bar({a => 1, b => 2})
est généralement utilisé uniquement pour les arguments supplémentaires (et éventuellement facultatifs).
Pour un usage typique, je préfère la première forme. Les {}
sont une frappe supplémentaire, un bruit supplémentaire à lire et créent une erreur possible si vous omettez l'une ou l'autre des accolades. Toute différence de performance est négligeable. (Si ce n'est pas le cas, vous avez des problèmes plus importants.) D'un autre côté, envelopper les arguments dans un constructeur de hachage anonyme peut vous aider à trouver des erreurs au moment de la compilation plutôt qu'à l'exécution.
La seconde forme est généralement vue mélangée avec des arguments positionnels. par exemple.Benchmark fait ceci:
cmpthese(10000, {
foo => \&foo,
bar => \&bar,
});
Alors que Tk quitte le {}
sur:
my $text = $w->Scrolled('Text', -width => 80, -height => 50);
Il est généralement un choix stylistique.
+1 pour souligner les aspects de performance. –
Ces «aspects de performance» sont des micro-optimisations inutiles qui n'apportent aucun avantage pratique. Un hachage peut être utilisé aussi facilement qu'une liste: 'foo (% hash)' ou un hashref: 'foo (% {$ hashref})'. S'en tenir au style foo laisse plus de puissance à l'utilisateur. – jmz
En fait, mon propre benchmarking a montré (sur plusieurs installations) qu'il est plus rapide de transmettre des listes que des références - bien qu'il semble plus rapide de renvoyer des références. – Axeman