В Perl 6 есть метаоператор R, который меняет операнды у другого оператора. Как и другие метаоператоры, R модифицирует поведение одного из уже существующих операторов, как встроенных, так и определенных пользователем.
1
Проще всего начать с элементарного примера.
say 5 R- 3; # -2
Без R получилось бы 2, а с ним запись 5 R- 3 равносильна 3 - 5.
Еще один пример, с оператором %%, который сообщает, делимо ли одно число на другое.
say 3 R%% 10; # False say 3 R%% 12; # True
2
Можно попробовать применить метаоператор в выражении с двумя и более операциями. Например:
say 10 R- 20 R- 40; # 10
Здесь в обоих случаях стоит оператор минус, так что в итоге мы получаем 40 - (20 - 10).
Подобные конструкции c R вполне можно завернуть в оператор редукции. Предыдущий пример более наглядно (если это слово здесь применимо) записывается так:
say [R-] 10, 20, 40; # 10
После прочтения всех этих новшеств возникает ощущение, что в перл6 напихали всего по-максимум просто «потому что можем». Никакого особого смысла в подобных операторах не видно, кроме того читаемость, за что вечно хаяли перл5, будет ещё хуже, всё это нагромождение «чудесных» операторов только повышает шанс не поставить лишний символ (~~ ~~~ .. … etc.), не заметить его при прочтении кода, а ещё ж и юникодные аналоги, ещё и свои операторы хитросимвольные и так далее, тем не менее перл6 скушает это всё и отработает, а если ещё принять во внимание, что у некоторых операций и операторов есть и внутренний «искусственный интеллект», как у операции инкремента строк с именем файла внутри, то вообще что-то понять в реальной программе, написанной скиловым перл6виком, будет практически нереально, это будет мешанина (спец-)символов в разы массивнее, чем перл5. Конечно, timwtdi никто не отменял, но откровенно позволяя, развивая и поощряя все эти разные способы какого-то успеха вряд ли удасться добиться языку.
Тестируйте свой код на любом языке, создавайте искусственные ошибки, смотрите как ваша программа будет работать и реагировать на эти ошибки.