"Perl 6 Operatoren"
Spreker: Juerd
Duur: 45 minuten
Niveau: Gevorderd
The English translation is here.
Inleiding
- Expressieve kracht zit in operatoren
- »~&=«
Samenvatting
- Sommige dingen veranderen
- Er komt veel bij
- Meer linenoise + meer gemak
== meer Perl
Perl 5 operatoren
-> ++ -- ** ! ~ \ and u+ u- =~ !~ * / % x + - . << >> < > <= >= lt gt le ge
== != <=> eq ne cmp & | ^ && || .. ... ?: = op= , => not and or xor
Operatoren die hetzelfde blijven
! != % && * ** + ++ - -- .. / < <= <=> == > >= \ and and cmp eq ge gt le
lt ne not op= or xor ||
Veranderende operatoren
-> . ~ ^ ?: x => & | ^ << >>
Nieuwe operatoren
<> «» »« | & ^ := ::= =:= ^^ // ? + ~ true err ¥ : ...
Even bijkomen
:)
De grote verschuiving
- -> wordt .
- . wordt ~
- ~ wordt ^
- ^ wordt +^, ~^ of ?^
Meer veranderingen
- ?: wordt ??::
- x wordt x en xx
- => gaat pairs maken
Bitwise ops
| & | | | ^ | < | > |
+ | +& | +| | +^ | +< | +> | numeriek
|
---|
~ | ~& | ~| | ~^ | ~< | ~> | stringy
|
---|
? | ?& | ?| | ?^ | | | boolean
|
Linenoise uitgelegd
(»~&=«)
$foo ~&= " "
is gewoon
$foo = $foo ~& " "
»« komt straks
Smart matching
- =~ verdwijnt
- ~~ doet een smart match
- !~ ook, maar dan negated
- vergelijk alles met alles
Voorbeelden met ~~
if $string ~~ $regex { ... }
if @array ~~ $element { ... } # grep
if $string ~~ $substring { ... } # eq
if $class ~~ SuperClass { ... } # isa
Gat opvullen
- and heeft &&
- or heeft ||
- xor krijgt ^^
Defined-or
my $foo = $input || 'default';
my $foo = $input // 'default';
err is de low precedence-versie
Woordenlijsten
- < foo bar baz > is de nieuwe qw
- « foo $bar baz » doet aan interpolation
Pairs
- foo => "bar"
- :foo("bar")
- :foo<bar>
- :foo«bar»
:foo betekent
:foo(1)
Hash subscripts
- %hash{foo} is %hash{ foo() }
- %hash<foo> is %hash{ 'foo' }
Binding
- $bar := $foo
- $bar ::= $foo
- $foo =:= $bar
(p5: \$foo == \$bar)
Context forceren
- + numeriek
- ~ string
- ? boolean, met low prec. true
- (! boolean, met low prec. not)
Ritsen
¥ of
Y of
zip()
@foo ¥ @bar
# wordt
@foo[0], @bar[0],
@foo[1], @bar[1],
@foo[2], @bar[2], ...
Hyper
@quux = map { $_ + 3 } @foo
@quux = @foo »+ 3;
@quux = map { @foo[$_] + @bar[$_] }
0 .. min(@foo.last, @bar.last);
@quux = @foo »+« @bar;
Linenoise uitgelegd
@ips »~&=« @netmasks
Juncties!!!
if $foo == 'foo' | 'bar' { ... }
if $foo & $bar > 3 { ... }
Soorten juncties
- |, any()
- &, all()
- ^, none()
- one() is any() met beperking
Gemak
if $a != $c
and $a != $d
and $b != $c
and $b != $d { ... }
wordt
if $a & $b == $c ^ $d { ... }
Meer gemak
if $a != $d and $a != $e and $a != $f
and $b != $d and $b != $e and $b != $f
and $c != $d and $c != $e and $c != $f { ... }
wordt
if all($a, $b, $c)
== none($d, $e, $f) { ... }
Echte kracht
if all(@foo) != none(@bar)
{ ... }
Juncties als normale waarden
my $junc = 11 | 20;
$junc += 5;
# $junc is nu 16 | 25
$j2 = sqrt($junc);
# $j2 is nu 4 | 5
Niet uitgelegd
- -> ("pointy sub")
- * ("splat")
- ** ("steam roller")
- <== en ==> ("pipes")
Books
- Perl 6 and Parrot Essentials, 2nd ed.
By Allison Randal, Dan Sugalski, Leopold Tötsch
ISBN: 059600737X
- Perl 6 Now: Core Ideas Illustrated With Perl 5
By Scott Walters
ISBN: 1590593952
Einde