- ~~
smartmatch ~~ - Don't use it!
~~ compares values as strings unless there is a better way to compare them So it can do things like "Foo" ~~ "Foo" 42 ~~ 42 42 ~~ 42.0 42 ~~ "42.0" 42 ~~ "23" And even $name ~~ @people @people ~~ $name $name ~~ %phonebook $name ~~ qr/regex-perl/ ~~ decides how to compare based on the values
perldoc perlsyn Smart matching in detail
$a $b Type of Match Implied Matching Code ====== ===== ===================== ============= (overloading trumps everything) Code[+] Code[+] referential equality $a == $b Any Code[+] scalar sub truth $b->($a) Hash Hash hash keys identical [sort keys %$a]~~[sort keys %$b] Hash Array hash slice existence grep {exists $a->{$_}} @$b Hash Regex hash key grep grep /$b/, keys %$a Hash Any hash entry existence exists $a->{$b} Array Array arrays are identical[*] Array Regex array grep grep /$b/, @$a Array Num array contains number grep $_ == $b, @$a Array Any array contains string grep $_ eq $b, @$a Any undef undefined !defined $a Any Regex pattern match $a =~ /$b/ Code() Code() results are equal $a->() eq $b->() Any Code() simple closure truth $b->() # ignoring $a Num numish[!] numeric equality $a == $b Any Str string equality $a eq $b Any Num numeric equality $a == $b Any Any string equality $a eq $b