length index functions perl terminology smartmatch

index - perl string length



¿Qué significa "~~" en Perl? (4)

(robado de Learn Perl): Binary "~~" hace una coincidencia inteligente entre sus argumentos.

http://perldoc.perl.org/perlsyn.html#Smart-matching-in-detail

¿Qué hace? "Depende" principalmente del tipo de argumentos proporcionados. La página enlazada arriba tiene un detalle insoportable sobre cuáles son las variaciones.

En una respuesta SO, los estados daxim :

@array ~~ $scalar is true when $scalar is in @array

a lo que responde draegtun :

Desde 5.10.1+ el orden de ~~ es importante. Por lo tanto, tiene que ser $ scalar ~~ @array

¿Qué tal una pequeña introducción en ~~ con enlace (s) a fuente (s) que incluya las siguientes preguntas específicas: ¿Qué es ~~ ? ¿Cómo se llama ~~ ? ¿Por qué el orden importa en una versión pero no en la anterior?

Tenga en cuenta que un buen resumen puede no obtener todos los detalles y puede ser difícil de escribir. Una introducción o una cartilla sería muy útil para ahorrar tiempo para alguien que no esté familiarizado con ~~ tiempo que amplía la exposición de este perlismo.

Cadenas de búsqueda : non-word-tilde-tilde non-word-at-sign .



Partido inteligente, ver perldoc perlsyn

Por una solicitud en el comentario, le daré un poco más: Smart Match es un operador para tipos de datos arbitrarios que intenta dar sentido a una prueba de igualdad que no sabe nada más que los tipos de argumentos, muchas de las pruebas requieren operaciones complejas como iteración y aplicación de expresiones regulares


Respondiendo específicamente "por qué el orden importa en una versión pero no en la anterior": el operador de coincidencia inteligente fue mal diseñado en 5.10.0 de una manera que lo hizo difícil de usar de manera confiable e hizo que la construcción dada / cuando sea menos útil de lo que podría ser, por lo que la semántica se cambió con 5.10.1 y todas las versiones futuras simularán que la versión 5.10.0 nunca existió.

En la versión 5.10.1+ de smart match, el operando izquierdo y el operando derecho para ~~ siempre se tratan de manera distinta. Al igual que con el operador de coincidencia =~ regex, el lado izquierdo es el "sujeto" de la coincidencia, y el lado derecho es el "patrón" con el que debe coincidir, ya sea un escalar plano, una expresión regular, una matriz o un hash referencia, una referencia de código, o lo que sea. Los detalles se detallan bastante bien en Perlsyn.

No debe preocuparse por la versión 5.10.0 a menos que ya haya escrito un código que dependa de la semántica 5.10.0 (en cuyo caso, debe reescribirlo para requerir 5.10.1, o se romperá en todos) futuras versiones de perl).