perl perl5 smartmatch

Perl 5.20 y el destino de la coincidencia inteligente y dado, ¿cuándo?



perl5 smartmatch (3)

Bueno, eso es lo que se dice en la description del parche que rebajó este conjunto de características a experimental:

El comportamiento de given / when / ~~ es probable que cambie en Perl 5.20.0: cualquiera de las coincidencias inteligentes se eliminará o se reducirá. A la luz de esto, los usuarios de estas características deben ser advertidos. Se debe emitir una advertencia de categoría "experimental :: smartmatch" para estas características cuando se utilizan.

Entonces, si puedes desactivar estas advertencias, con algo como esto ( source ):

no if $] >= 5.018, warnings => "experimental::smartmatch";

... solo está desviando la vista del problema.

Acabo de instalar Perl 5.18, y recibo muchas advertencias como esta,

given is experimental at ./[...].pl line [...]. when is experimental at ./[...].pl line [...]. Smartmatch is experimental at C:/strawberry/perl/site/lib/[...] line [...].

Al observar estas advertencias, que nunca he escuchado mencionar en ninguna parte, solo pude encontrar esto en dos lugares,

El Perl Delta todavía hace más para mencionar lo que está sucediendo con esas características, está a mitad de camino enterrado en la cápsula,

La coincidencia inteligente, agregada en v5.10.0 y revisada significativamente en v5.10.1, ha sido un motivo habitual de queja. Aunque hay varias maneras en que es útil, también ha resultado problemático y confuso tanto para los usuarios como para los implementadores de Perl. Ha habido una serie de propuestas sobre cómo abordar mejor el problema. Está claro que Smartmatch casi seguro va a cambiar o desaparecerá en el futuro. No se recomienda confiar en su comportamiento actual. Las advertencias ahora se emitirán cuando el analizador vea ~~, dado, o cuando.

Estoy confundido sobre cómo se podría sacar el cambio más significativo en Perl en los últimos 10 años. Empecé a usar given , when y smartmatch todas partes. ¿Hay más información sobre estos futuros? ¿Cómo es que alguien los encuentra "confusos"? ¿Cómo pueden cambiar estas características? ¿Existe un plan para implementar estas características con un módulo?


Hay problemas con el diseño de la coincidencia inteligente. La decisión de qué debe hacer un TYPE ~~ TYPE determinado es, a menudo, no obvia, inconsistente y / o discutida. La idea no es eliminar la coincidencia inteligente; es para arreglarlo

Específicamente, ~~ se simplificará en gran medida, como puede ver en una proposal del 5.18 pumpking. Las decisiones sobre cómo deben coincidir dos cosas se harán con ayudantes como los que ya existen en Smart :: Match .

... ~~ any(...)

Mucho más legible, mucho más flexible (totalmente extensible) y resuelve una serie de problemas (como "¿Cuándo se debe considerar X como un número y cuándo se debe considerar una cadena?").


Se pueden obtener algunas ideas leyendo proposal . Él es el pumpking (gerente de lanzamiento de Perl) después de todo, por lo que sus comentarios y su visión del futuro son más relevantes que la mayoría. También hay muchos comentarios de la comunidad sobre el tema, ver here por ejemplo. El estado ''experimental'' está en vigor porque, dado que es probable que las cosas cambien en el futuro, es responsable informar a los usuarios de ese hecho, incluso si no sabemos cuáles serán esos cambios.