Перейти к основному содержанию
Тема: [Perl 6] Операторы (Прочитано 2006 раз) предыдущая тема - следующая тема

[Perl 6] Операторы

https://docs.perl6.org/language/operators

Операторов ооочень много, я их пока все не запомнил. Ниже будут примеры.
Операторы могут быть в разных позициях применения:

Operator classification 
Operators can occur in several positions relative to a term:
+termprefix
term1 + term2infix
term++postfix
(term)circumfix
term1[term2]postcircumfix

Re: [Perl 6] Операторы

Ответ #1
prefix
Создание своих операторов в Perl 6, часть 1
sub prefix:<§>($str) {
    $str.uc
}

say §'hello, world!'; # HELLO, WORLD!

sub prefix:<🔊>(Str $str) {
    $str.uc
}
say 🔊'hello, world!';

infix
Создание своих операторов в Perl 6, часть 2
https://docs.perl6.org/language/operators#Dotty_Infix_Precedence
sub infix:<≈>($a, $b) {
    abs($a) - abs($b) < 1
}

say 3.14 ≈ pi; # True

postfix
https://docs.perl6.org/language/operators#postfix_.
sub postfix:<!>(Int $n) {
    [*] 1..$n
}

say 5!; # 120

circumfix
sub circumfix:<¿ ?>(Str $str) {
    $str.chars
}

say ¿'Hello, World!'?;
# 13

postcircumfix
Method Postfix Precedence
Создание своих операторов в Perl 6, часть 3
sub postcircumfix:<¿ ?>(Str $question, Str $answer) {
    say "Q: $question";
    say "A: $answer";
}

"Hello"¿"World"?;

# Q: Hello
# A: World

Re: [Perl 6] Операторы

Ответ #2
Reversed operator

Реальный пример из модуля zef:
my $meta6-prefix = '' R// $!extractor.ls-files($candi.uri).sort.first({ .IO.basename eq 'META6.json' });
Символ R перед оператором // меняет порядок проверки сторон на противоположный.
Сначала будет проверено значение правой части от R// и если оно не определено, то тогда результатом будет значение слева.

Напомним, что оператор // это defined-or operator:
say Any // 0 // 42; # 0

Ещё пример из документации:
say 4 R/ 12;        # OUTPUT: «3␤» 
say [R/] 2, 4, 16;  # OUTPUT: «2␤»