Больше информации от в Perl 6, статья в Википедии
Развязка
В Perl 6 вводится концепция соединений: значения, которые являются составной частью других значений. [24] В первые дни разработки Perl 6 их называли «суперпозициями», по аналогии с концепцией квантовой физики квантовых суперпозиций - формами волн, которые могут одновременно занимать несколько состояний, пока наблюдение не «свернет» их. Модуль Perl 5, выпущенный Дамианом Конвеем в 2000 году под названием Quantum :: Superpositions [25], обеспечил первоначальное доказательство концепции. Хотя поначалу такие суперпозиционные значения казались просто программным любопытством, со временем их полезность и интуитивность стали широко признаваться, а соединения теперь занимают центральное место в дизайне Perl 6.
В простейшем виде соединения создаются путем объединения набора значений с операторами соединения:
my $any_even_digit = 0|2|4|6|8; # any(0, 2, 4, 6, 8)
my $all_odd_digits = 1&3&5&7&9; # all(1, 3, 5, 7, 9)
| указывает значение, равное его левому или правому аргументу. & указывает значение, равное как левому, так и правому аргументам. Эти значения могут использоваться в любом коде, который будет использовать нормальное значение. Операции, выполняемые на соединении, действуют одинаково на всех элементах соединения и объединяются в соответствии с оператором соединения. Таким образом, ("яблоко" | "банан") ~ "s" приведет к "яблкам" | "бананам". В сравнениях, соединения возвращают один истинный или ложный результат для сравнения. «Любые» соединения возвращают значение «истина», если сравнение истинно для любого из элементов соединения. «все» соединения возвращают значение «истина», если сравнение истинно для всех элементов соединения.
Соединения могут также использоваться для более полного расширения системы типов путем введения стиля общего программирования, ограниченного соединениями типов:
sub get_tint ( RGB_Color|CMYK_Color $color, num $opacity) { ... }
sub store_record (Record&Storable $rec) { ... }