Perl 6似乎有一个爆炸的平等运算符。什么是=:=? leg和cmp有什么区别?或eqv和===?
有没有人有一个好的总结?
解决方法
=:=测试如果两个容器(变量或数组或散列项)是别名的,即如果一个变化,另一个变化吗?
my $x; my @a = 1,2,3; # $x =:= @a[0] is false $x := @a[0]; # now $x == 1,and $x =:= @a[0] is true $x = 4; # now @a is 4,3
至于其他:===测试如果两个引用指向同一个对象,并且eqv测试两个东西是否在结构上等效。所以[1,3] === [1,3]将是假的(不是相同的数组),但是[1,3] eqv [1,3]将是真的(相同的结构)。
腿比较像Perl 5的cmp的字符串,而Perl 6的cmp更聪明,并将比较像< =>和字符串像腿。
13 leg 4 # -1,because 1 is smaller than 4,and leg converts to string 13 cmp 4 # +1,because both are numbers,so use numeric comparison.
最后~~是“智能匹配”,它回答问题“做$ x匹配$ y”。如果$ y是一个类型,它是类型检查。如果$ y是正则表达式,它是正则表达式匹配 – 等等。