El operador de coincidencia inteligente "generalmente hará lo que quiera". Por favor, lea esto como "no siempre".
42 ~~ 42.0
devuelve true.
42 ~~ "42.0"
devuelve true también: la cadena se compara con un número y, por lo tanto, se ve como un número. Ídem para "42" ~~ 42.0
.
"42" ~~ "42.0"
devuelve false: ambos argumentos son cadenas, y estas cadenas no se pueden comparar como "iguales", aunque su significado numérico sí lo haría. No querrá que Perl vea "two" ~~ "two-point-oh"
como verdadero.
Una cadena puede ser forzado a que es la interpretación numérica mediante la adición de cero:
0+"42" ~~ "42.0"
devuelve true de nuevo, como la primera cadena se ve obligado a 42
el número, y el segundo hace lo mismo.
El perldoc perlsyn
o perldoc perlop
page define cómo funciona Smart Matching:
Object Any invokes ~~ overloading on $object, or falls back:
Any Num numeric equality $a == $b
Num numish[4] numeric equality $a == $b
undef Any undefined !defined($b)
Any Any string equality $a eq $b
se puede ver que la igualdad cadena es el valor predeterminado.
No, son todas LA RESPUESTA. ;) –