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.
Respostas:
As pessoas frequentemente confundem os problemas que surgem com o operador smartmatch com os que surgem com a
given/when
construçã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 ~~ $b
está 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 .
fonte
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.
fonte