=: = проверяет, являются ли два контейнера (переменные или элементы массивов или хэшей) псевдонимами, то есть, если один из них изменяется, другой тоже меняется?
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, 2, 3
Что касается остальных: === проверяет, указывают ли две ссылки на один и тот же объект, и eqv проверяет, являются ли две вещи структурно эквивалентными. Таким образом, [1, 2, 3] === [1, 2, 3]
будет ложным (не тот же массив), но [1, 2, 3] eqv [1, 2, 3]
будет истинным (та же структура).
leg
сравнивает строки, подобные Perl 5 cmp
, тогда как Perl 6 cmp
умнее и сравнивает числа, такие как <=>
, и строки, такие как leg
.
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
является регулярным выражением, это совпадение с регулярным выражением - и т. Д.