NAME

Perl6::Overview::Operator - Operators

DESCRIPTION

Precedence

terms               42 3.14 "eek" qq["foo"] [1,2,3] {...} \(@a,$b,%c)
                        $x @y %z /abc/ MyType @@multidim $^a
                        (1+2) a(1) :by(2) :!verbose :(Dog $self:)
                        .meth with implicit invocant
                        listops leftward
method postfix      .meth .+ .? .* .() .[] .{} .<> .«» .:: .= .^
autoincrement       ++ --
exponentiation      **
symbolic unary      ! + - ~ ? $ @ % & +^ ~^ ?^ \ ^ =
multiplicative      * / % x xx +& +< +> ~& ~< ~> ?&
additive            + - ~ +| +^ ~| ~^ ?| ?^
junctive and (all)  &
junctive or (any)   | ^
named unary         rand sleep abs etc. -e -r -w -x etc.
nonchaining binary  but does <=> leg cmp
                        .. ^.. ..^ ^..^
                        ff ^ff ff^ ^ff^
                        fff ^fff fff^ ^fff^
chaining binary     != == < <= > >=
                        eq ne lt le gt ge
                        ~~ =:= === eqv
                        !== !~~ !eq !=:= !=== !eqv etc.
tight and           &&
tight or            || ^^ //
conditional         ?? !!
item assignment     = := ::= =>
                        (also = with simple lvalues)
                        += -= **= xx= .= etc.
loose unary         true not
comma		,
list infix          X Z minmax <== ==>
list ops            = print push say join split substr open etc.
                        any all one none
                        die fail warn
                        !!! ...  ???
                        [+] [*] [<] [,] [\+] [\*] etc.
                        (also = as list assignment)
loose and           and
loose or            or xor err
expr terminator     ; {} as control block, statement modifiers
                        unmatched ), ], }, etc.

Simple arithmetic operators

4 + 2        # 6, addition
4 - 2        # 2, subtraction
4 * 2        # 8, multiplication
4 / 2        # 2, division
4 ** 2       # 16, exponentiation
4 % 2        # 0, modulo

Bit operators

Numeric   Stringy   Boolean
---------------------------
+|        ~|        ?|           # OR
+&        ~&        ?&           # AND
+^        ~^        ?^           # XOR
+^        ~^        ?^           # Negation (prefix unary)
+<        ~<                     # Shift left
+>        ~>                     # Shift right

Unary context operators

+           # Num
~           # Str
?           # Bool
int         # Int
item        # Item
list        # List
hash        # Hash
pair        # Pair

Meta-operators

@foo >>op $bar    # hyper loop over left side
$foo op<< @bar    # hyper loop over right side
@foo >>op<< @bar  # hyper loop over both sides, parallel
[+] @foo          # reduce with specified infix op
[+] 1, 2, 3       # 1 + 2 + 3

.= .? .* .+       # See oo

Assignment operators

$copy = $foo     # assign
$alias := $foo   # bind, runtime
$alias ::= $foo  # bind, compile time
$foo++           # postincrement
$foo--           # postdecrement
++$foo           # preincrement
--$foo           # predecrement
$foo op= $bar    # mutate ($foo = $foo op $bar), where op is any infix

Comparison operators

Generic   Num   Str
-------------------
=:=                   # equality (container)
!=:=                  # negated equality (container)
===                   # equality (value, eternal semantics)
!===                  # negated equality (value, eternal semantics)
eqv       ==    eq    # equality (value, snapshot semantics)
!eqv      !==   !eq   # negated equality (value, snapshot semantics)
          !=    ne    # traditional shortcuts for previous
          <     lt    # less than
          >     gt    # greater than
          <=    le    # less than or equal to
          >=    ge    # greater than or equal to
cmp       <=>   leg   # lt => -1, eq => 0, gt => +1
~~                    # smart match (see smartmatch)
!~~                   # negated smart match

In general, any infix comparison operator (that doesn't begin with a !) may be transformed into its negative by prefixing with !.

Logic operators

HighPrec  LowPrec
-----------------
&&        and       # infix
||        or        # infix
^^        xor       # infix
//        err       # infix (defined-or)
!         not       # prefix
?         true      # prefix
?? !!               # ternary

Quote-like operators

Generalized Short   Shorter
-----------------------------
q:0
q:1         q       ''
q:2         qq      ""
q:to
q:0:w       qw      <>
q:2:w       qww     «» <<>>    # XXX qww or qqw? :2:w correct?
            m       //
            rx      //

Junctive operators

$foo | $bar | $baz   # any($foo, $bar, $baz)
$foo & $bar & $baz   # all($foo, $bar, $baz)
$foo ^ $bar ^ $baz   # one($foo, $bar, $baz)
(no chaining op)     # none($foo, $bar, $baz)

Yada yada yada operators (terms)

...  # fail "$?BLOCKNAME is not yet implemented"
???  # warn "$?BLOCKNAME is not yet implemented"
!!!  # die  "$?BLOCKNAME is not yet implemented"

Miscellaneous operators

\$foo               # capture
$foo ~ $bar         # string concat
$foo x 3            # $foo ~ $foo ~ $foo
$foo xx 3           # ($foo, $foo, $foo)
@foo Z @bar Z @baz  # zip(@foo; @bar; @baz)
@foo X @bar X @baz  # cross(@foo; @bar; @baz)
item ($foo, $bar)   # [ $foo, $bar ]
1..5                # (1, 2, 3, 4, 5)
"a".."g"            # <a b c d e f g>
;                   # statement separator

See also

.method         # oo
.=method        # oo
.()             # sub
.[]             # data
.{}             # data
.<>             # data
.<<>>           # data
$, @, %, &, ::  # data
k => $v         # data
:k($v)          # data
<==, ==>        # sub

1 POD Error

The following errors were encountered while parsing the POD:

Around line 14:

Non-ASCII character seen before =encoding in '.«»'. Assuming UTF-8