Perl 6 has a huge amount of operators, because they support 2 of the main design goals: they offer *dense* and *readable* code. _{{2 + 3}}_ is certainly shorter and easier to understand then _{{add(2,3)}}_, since "pictograms"{link: [perl 6 language design tablet] visual metaphor} can be picked up faster than words. (Fortran made his whole carrier on that). But because they are so many, they had to be sorted by a rule named "huffman coding"{link: [perl 6 language design tablet] huffman coding}, which was applied here more than in any other part of the syntax.

To understand an operator you have to know his *arity* (how many parameters he takes - usually one (!) or two (+) ).

The *"precedence"{link: [perl 6 lookup tablet]table of precedence}* tells which operator to prefer in case of conflict, when no braces are used (round braces are only used for grouping and managing precedence). It allows _{{2 + 3 * 5}}_ to return 17, not 25, which would upset your math teacher.

Behind that link is a table which also tells you also the *"associativity"{link: [perl 6 lookup tablet]Operator Associativity}* of every operator. This tells you after which rule to resolve precedence if one operator is used several times like in _{{2 * 3 * 7}}_.

^ Comparison

^^ 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 op 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"{link: [perl 6 variable tablet] data types} of the values on both sides. Just look into that "large table"{link: [perl 6 lookup tablet] smartmatch} to check your specific case.

Smartmatching was originally invented to make "matching with regex"{link: [perl 6 regex tablet]Matching} semantically sane.

> ~~ !~

^^ Equality

> eqv eq == ===
> != !==

^^ Traversing Sequence

> ++ -- succ pred

"sequence generation"{link: Sequence Operator}

^^ Generic Comparison

> before after cmp

^^ Numerical Comparison

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

^^ String Comparison

> lt eq gt leg le ge

^^ joined comparison

> 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)