1.perl中~~為智能匹配,它可以智能地根據符號兩側的運算元來確定操作。
如要判斷某個元素是否存在於數組中,不使用智能匹配,程式像這樣:
my $x=2;my @array=(1,2,3);my $flag=0;for (@array){if($x==$_){$flag=1;}}if($flag == 1){print "$x is in the array";}else{print "$x is not in the array";}
使用智能匹配,程式像這樣:
my $x=2;my @array;if(@array~~$x){print "$x is in the array";}else{print "$x is in the array";}
再如查看雜湊表中是否存在某個索引值
‘hello’~~{hello=>1,world=>2} 結果為true
2.智能匹配的優先順序在perl的線上文檔中,智能匹配會按照表格的順序選擇匹配,優先順序從上到下逐漸降低。
$a $b Type of Match Implied Matching Cod ====== ===== ===================== ============= 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