¿Por qué el operador de emparejamiento inteligente de Perl 5 se considera roto? [cerrado]


17

He visto varios comentarios en la web. El operador de emparejamiento inteligente de Perl no funciona . Sé que originalmente era parte de Perl 6, luego se implementó en Perl 5.10 fuera de una versión anterior de la especificación, y luego se corrigió en 5.10.1 para que coincida con la especificación actual de Perl 6.

¿Se solucionó el problema en 5.10.1+, o hay otros problemas con el operador de emparejamiento inteligente que lo hacen problemático en la práctica?

¿Cuáles son los problemas?

¿Existe una versión aún más actualizada (Perl 6, tal vez) que solucione los problemas?

Editar: para aclarar, no estoy preguntando sobre errores, sino más bien la opinión de que el comportamiento previsto ~~es malo.


¿No sería esto mejor en SO?

3
Parece que odia las preguntas que no se pueden responder con fragmentos de código en estos días.
Sean McMillan

2
No creo que pertenezca a SO, pide una explicación conceptual sobre por qué el operador de emparejamiento inteligente de Perl se considera roto.
Yannis

1
Por lo que veo en su enlace, parece que la coincidencia inteligente es (o fue) recursiva, por lo que probablemente podría conducir a una recursión infinita solo porque una matriz (posiblemente indirectamente) contiene una referencia a sí misma.
usuario281377

2
@SeanMcMillan - SO odia muchas cosas en estos días: /
Rook

Respuestas:


14

La gente a menudo confunde los problemas que surgen con el operador smartmatch con los que surgen con la given/whenconstrucción, como el problema del léxico $_.

He llegado a la opinión de que si usa el operador smartmatch solo en literales, no se volverá loco. No puedo hacer promesas sobre ninguna otra situación. Tratar de descubrir qué $a ~~ $bestá haciendo es suficiente para hacer que cualquier ser humano decente corra gritando de locura y tome otro lenguaje de programación por completo.

O al menos, esa es la toma que recibí de Larry cuando estaba editando la sección de Smartmatch de la 4a edición de Programming Perl .


4

El operador de partido inteligente no estaba "roto" , pero tenía muchos errores. Perl v5.12 arregló eso, y Perl v5.14 lo perfeccionó en mi humilde opinión. Entonces, para responder a su pregunta, Perl v5.12 y superior soluciona este problema. Puede probarlo con versiones posteriores de Perl v5.10, pero sé que funciona mejor en Perl 5.12+.

Editar: para responder a su edición, vea este blog . Después de leer el artículo, creo que respondió suficientemente a su pregunta.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.