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
.
Es el operador de smartmatch .
En general, cuando desee información sobre operadores en Perl, consulte perldoc perlop
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).