Por que o operador de correspondência inteligente do Perl 5 é considerado quebrado? [fechadas]

17

Vi vários comentários na Web, o operador de correspondência inteligente do Perl está quebrado . Eu sei que originalmente fazia parte do Perl 6, depois foi implementado no Perl 5.10 com base em uma versão antiga da especificação e foi corrigido na 5.10.1 para corresponder à especificação atual do Perl 6.

O problema foi corrigido no 5.10.1+ ou há outros problemas com o operador de correspondência inteligente que o tornam problemático na prática?

Quais são os problemas?

Existe uma versão ainda mais atualizada (talvez Perl 6) que resolva os problemas?

Edit: Para esclarecer, não estou perguntando sobre bugs, mas sim a opinião de que o comportamento pretendido ~~é ruim.

Sean McMillan
fonte
Isso não seria melhor para o SO?
3
Portanto, parece odiar perguntas que não podem ser respondidas com trechos de código atualmente.
21711 Sean McMillan
2
Eu não acho que ele pertence ao SO, ele pede uma explicação conceitual sobre o motivo pelo qual o operador de correspondência inteligente do Perl é considerado quebrado.
precisa
1
Pelo que vejo no seu link, parece que a correspondência inteligente é (ou foi) recursiva, portanto provavelmente poderia levar a uma recursão infinita apenas porque uma matriz (possivelmente indiretamente) contém uma referência a si mesma.
user281377
2
@SeanMcMillan - SO odeia muitas coisas hoje em dia: /
Rook

Respostas:

14

As pessoas frequentemente confundem os problemas que surgem com o operador smartmatch com os que surgem com a given/whenconstrução, como o problema do léxico $_.

Cheguei à opinião de que, se você usar o operador smartmatch apenas em literais, não ficará louco. Não posso fazer promessas sobre qualquer outra situação. Tentar descobrir o que $a ~~ $bestá fazendo é suficiente para levar qualquer ser humano decente a gritar de loucura e a adotar outra linguagem de programação.

Ou, pelo menos, foi o que recebi de Larry quando ele estava editando a seção smartmatch da 4ª edição da Programming Perl .

tchrist
fonte
4

O operador de correspondência inteligente não estava "quebrado" , mas tinha muitos bugs. O Perl v5.12 corrigiu isso e o Perl v5.14 o aperfeiçoou no IMHO. Portanto, para responder sua pergunta, o Perl v5.12 e posterior corrige esse problema. Você pode experimentá-lo com versões posteriores do Perl v5.10, mas eu sei que funciona melhor no Perl 5.12+.

Editar: para responder sua edição, consulte este blog . Depois de ler o artigo, acredito que ele respondeu suficientemente à sua pergunta.

Dinâmico
fonte