Pourquoi l'opérateur de correspondance intelligente de Perl 5 est-il considéré comme rompu? [fermé]

17

J'ai vu un certain nombre de commentaires sur le Web. L'opérateur de correspondance intelligente de Perl est rompu . Je sais qu'il faisait à l'origine partie de Perl 6, puis a été implémenté en Perl 5.10 à partir d'une ancienne version de la spécification, puis a été corrigé en 5.10.1 pour correspondre à la spécification Perl 6 actuelle.

Le problème est-il résolu dans 5.10.1+, ou y a-t-il d'autres problèmes avec l'opérateur de correspondance intelligente qui le rendent problématique dans la pratique?

Quels sont les problèmes?

Existe-t-il une version encore plus mise à jour (Perl 6, peut-être) qui résout les problèmes?

Edit: Pour clarifier, je ne pose pas de questions sur les bugs, mais plutôt sur l'opinion selon laquelle le comportement prévu de ~~est mauvais.

Sean McMillan
la source
Cela ne serait-il pas mieux pour SO?
3
Il semble donc détester les questions auxquelles les extraits de code ne peuvent pas répondre de nos jours.
Sean McMillan
2
Je ne pense pas qu'il appartient à SO, il demande une explication conceptuelle sur la raison pour laquelle l'opérateur de correspondance intelligente de Perl est considéré comme rompu.
yannis
1
D'après ce que je vois dans votre lien, il semble que la correspondance intelligente est (ou était) récursive, donc elle pourrait probablement conduire à une récursion infinie simplement parce qu'un tableau (éventuellement indirectement) contient une référence à lui-même.
user281377
2
@SeanMcMillan - SO déteste beaucoup de choses de nos jours: /
Rook

Réponses:

14

Les gens confondent souvent les problèmes qui surviennent avec l'opérateur smartmatch avec ceux qui surviennent avec la given/whenconstruction, comme le problème lexical $_.

Je suis venu à l'idée que si vous n'utilisez l'opérateur smartmatch que sur des littéraux, vous ne deviendrez pas fou. Je ne peux faire aucune promesse concernant une autre situation. Essayer de comprendre ce qui $a ~~ $best en train de faire suffit à conduire n'importe quel être humain décent à courir en hurlant de folie et à adopter un autre langage de programmation.

Ou du moins, c'est le point de vue que j'ai obtenu de Larry quand il éditait la section smartmatch de la 4ème édition de Programming Perl .

tchrist
la source
4

L'opérateur de match intelligent n'était pas "cassé" , mais il y avait beaucoup de bugs. Perl v5.12 a corrigé cela, et Perl v5.14 l'a perfectionné à mon humble avis. Donc, pour répondre à votre question, Perl v5.12 et plus résout ce problème. Vous pouvez l'essayer avec des versions ultérieures de Perl v5.10, mais je sais que cela fonctionne mieux dans Perl 5.12+.

Modifier: pour répondre à votre modification, consultez ce blog . Après avoir lu l'article, je pense qu'il a suffisamment répondu à votre question.

Dynamique
la source