L'operatore di smart match "di solito fa quello che vuoi". Si prega di leggere questo come "non sempre".
42 ~~ 42.0
restituisce true.
42 ~~ "42.0"
restituisce true pure: la stringa viene confrontata con un numero e quindi vista come un numero. Idem per "42" ~~ 42.0
.
"42" ~~ "42.0"
restituisce false: entrambi gli argomenti sono stringhe e queste stringhe non vengono confrontate come "uguali", sebbene il loro significato numerico lo farebbe. Non vorrai che Perl visualizzi "two" ~~ "two-point-oh"
come vero.
Una stringa può essere forzato alla sua interpretazione numerico aggiungendo lo zero:
0+"42" ~~ "42.0"
restituisce true nuovo, come la prima stringa è costretto al numero 42
, e la seconda segue tuta.
Il perldoc perlsyn
o perldoc perlop
page definisce come funziona 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
Si può vedere che l'uguaglianza stringa è il valore predefinito.
No, sono tutti LA risposta. ;) –