Intro    Chapter:   0. History   1. Design   2. Basic   3. Var   4. Op   5. IO   6. Block   7. Sub   8. OOP   9. Regex   10. Meta
Overview   Appendix:   A. Index   B. Grouped   C. Classtree   D. Delta   E. Exciting   F. FAQ   G. Glossary   H. Href

Perl folklore: Perl is an operator based language.

Perl 6 knows a huge amount of operators, because they support 2 of the main design goals: they enable dense and intuitive readable code. 2 + 3 is certainly shorter and easier to understand then add(2,3), since pictograms can be picked up faster than words (by right brain instead of left). (Fortran made its whole career on that). Forwhy here are so many ops, they had to be sorted by a rule named huffman coding.

Please make also sure you understand the important operator related terms: arity (number of operands), precedence (operator priority), associativity (operand priority) and context.

Comparison

Equality

<=> leg cmp eqv === != !== eq ==

Ordered Set

++ -- succ pred

sequence generation

Generic

before after cmp

Numerical

< == > <=> <= >=

String

lt eq gt leg le ge

Joined

3 < $a == $a < 7

is not the same as

3 < $a < 7

because latter is evaled at once and the first in 2 steps (left to right).

Smartmatch

This is the most mighty (much more mighty than its backported Perl 5 twin) of all Perl 6 operators. It can be called the "compare-this-with-that-operator". If the left side of that infix operator matches somehow the content of the right side, it returns Bool::True, otherwise Bool::False. The negated form !~~ naturally works the other way around. The exact comparison operation depends on the data types of the values on both sides. Just look into that large table to check your specific case.

Smartmatching was originally invented to make matching with regex semantically sane.

~~ !~~

Junctions

| & ^ !
any all one none

Ranges

.. ^

File Test

Are now ordinary methods of the IO type.

table of all

Selection

none context forcing

Logic

&& - and
|| - or
// - orelse
^^ - xor

see also numerical selection

Ternary

?? !!

Flipflop

ff fff

Context Scalar Ops

Bool Context

? !
?& ?| ?^

Numeric Context

+ - * ** / % %%
mod exp sqrt sin cos tan log log10

Numerical Selection

min max minmax

Bitflipping

+& +| +^ +< +>

String Context

~ x

~& ~| ~^ ~< ~>

List Ops

List Generation

The simplest way to create a list is by repeating some values:

'munch' xx 3 # results in 'munch', 'munch', 'munch'
('hallo', 'echo') xx 2 --> 'hallo', 'echo', 'hallo', 'echo'

Range Operator

In list context the range operator produces lists:

@ 2 .. 7 --> 2,3,4,5,6,7

Sequence Operator

...

traversing sequence

Feed Ops

<== ==>
<<== ==>>

Zip

Z

Combinators

X

Meta Ops

self assigning

negation

reverse

R

sequencial

S

opposite of hyperops

Meta Z

Z

Meta X

X

Reduce

[ ]

Triangle

[\ ]

Hyperops

« » << >>

Miscellaneous

Assignment and Binding

Even if technically =, :=, ::= and =:= are operators, they are handled on the previous (variable) tablet in the chapters assignment and binding. That is because they force the evaluation of the expression on their right side and do something with the result on the variable on their left side.

yadda

...
???
!!!

Precedence Table

is in Appendix B

Intentionally Not Existing

=~

Selfmade Operators

How to make your own is subject this chapter at the metaprogramming tablet.


Intro    Chapter:   0. History   1. Design   2. Basic   3. Var   4. Op   5. IO   6. Block   7. Sub   8. OOP   9. Regex   10. Meta
Overview   Appendix:   A. Index   B. Grouped   C. Classtree   D. Delta   E. Exciting   F. FAQ   G. Glossary   H. Href