Разумеется, нас интересует возможность обмена значениями без привлечения третьей временной переменной.
В Perl 6 это можно сделать ровно так же как и в Perl 5:
my $a = 10; my $b = 20; ($a, $b) = ($b, $a); say "$a, $b"; # 20, 10
Скобки здесь обязательны, без них не получится.
Есть и еще один вариант:
my $a = 10; my $b = 20; ($a, $b).=reverse; say "$a, $b"; # 20, 10
Здесь ($a, $b) — объект типа List. Вызванный на нем метод reverse обращает список. Но метод вызван не как обычно, а через постфиксный псевдо-оператор .=.
Семантика вызова $obj.=method отличается от $obj.method точно так же как $i += 1 отличается от $i + 1. То есть результат, возвращаемый методом, присваивается списку, на котором метод был вызван. В нашем случае был анонимный список, состоящий из двух переменных, поэтому они и получат новые значения.
Аналогичным способом можно обращать и более длинные списки и массивы. Например:
my @a = 1..10; @a.=reverse; say @a; # [10 9 8 7 6 5 4 3 2 1]